I am trying to create an app that records audio in background. I using Service class for this purpose. Since I do not want to block my UI Thread, I have created a HandlerThread in my Service class to perform the recording operation. However, when I am trying to run the Service, my app throws ANR (Application Not Responding) error. I am unable to figure out how my UI Thread is getting blocked. Also worth mentioning is that I have created a CountUp Timer which runs on my UI Thread.
Here is my code:
public class AudioRecorderService extends Service {
private Looper mLooper;
private AudioRecorderHandler mAudioRecorderHandler;
private MediaRecorder mAudioRecorder;
public AudioRecorderService() {
}
private final class AudioRecorderHandler extends Handler {
private String fileName;
public AudioRecorderHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
fileName = Environment.getDataDirectory().getAbsolutePath() + "/" + "test.mp4";
mAudioRecorder = new MediaRecorder();
mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mAudioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mAudioRecorder.setAudioEncodingBitRate(256);
mAudioRecorder.setAudioChannels(1);
mAudioRecorder.setAudioSamplingRate(44100);
mAudioRecorder.setOutputFile(fileName);
try {
mAudioRecorder.prepare();
mAudioRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Recording Started", Toast.LENGTH_LONG).show();
Message msg = mAudioRecorderHandler.obtainMessage();
msg.arg1 = startId;
mAudioRecorderHandler.sendMessage(msg);
return START_REDELIVER_INTENT;
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
android.os.Debug.waitForDebugger();
HandlerThread thread = new HandlerThread("AudioRecorder", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mLooper = thread.getLooper();
mAudioRecorderHandler = new AudioRecorderHandler(mLooper);
}
@Override
public void onDestroy() {
if (mAudioRecorder != null) {
mAudioRecorder.stop();
mAudioRecorder.release();
mAudioRecorder = null;
}
Toast.makeText(this, "Recording Done", Toast.LENGTH_LONG).show();
mLooper.quit();
mLooper.getThread().interrupt();
}
}
Here is my Error Log:
06-19 00:24:18.394 509-528/? E/ANRManager: writeStringToFile error: /sys/module/mlog/parameters/do_mlog java.io.FileNotFoundException: /sys/module/mlog/parameters/do_mlog: open failed: ENOENT (No such file or directory)
06-19 00:24:18.410 509-528/? E/ANRManager: writeStringToFile error: /sys/kernel/debug/tracing/tracing_on java.io.FileNotFoundException: /sys/kernel/debug/tracing/tracing_on: open failed: ENOENT (No such file or directory)
06-19 00:24:18.412 509-528/? E/ANRManager: writeStringToFile error: /sys/kernel/debug/binder/transaction_log_enable java.io.FileNotFoundException: /sys/kernel/debug/binder/transaction_log_enable: open failed: ENOENT (No such file or directory)
06-19 00:24:18.414 509-528/? E/ANRManager: writeStringToFile error: /sys/module/mlog/parameters/timer_intval java.io.FileNotFoundException: /sys/module/mlog/parameters/timer_intval: open failed: ENOENT (No such file or directory)
06-19 00:24:20.636 509-528/? E/ANRManager: ANR in com.example.vaibhav.phrasesapp
Reason: Executing service com.example.vaibhav.phrasesapp/.AudioRecorderService
Load: 7.0 / 6.91 / 7.13
Android time :[2016-06-19 00:24:20.634] [40260.230]
CPU usage from 5420ms to 0ms ago:
3.1% 158/adbd: 0.7% user + 2.3% kernel / faults: 390 minor
0.9% 19339/kworker/0:3: 0% user + 0.9% kernel
0.7% 881/com.cleanmaster.boost:service: 0.1% user + 0.5% kernel / faults: 45 minor 2 major
0.7% 24461/logcat: 0.5% user + 0.1% kernel
0.5% 509/system_server: 0.3% user + 0.1% kernel / faults: 21 minor
0.5% 601/com.android.systemui: 0.3% user + 0.1% kernel / faults: 10 minor
0.5% 19114/logcat: 0.1% user + 0.3% kernel
5.8% TOTAL: 1.5% user + 3.9% kernel + 0.2% iowait
Can anyone please help?????
Aucun commentaire:
Enregistrer un commentaire