samedi 18 juin 2016

ANR on starting Background Service

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