录制音频时控制服务

control Service while recording audio

我想开启一个服务并录制音频然后关闭activity,但一直在录制,然后打开activity并停止录制。

这是我的服务:

public class RecorderService extends Service {

private Thread mThread;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    mThread = new Thread(new Runnable() {
        @Override
        public void run() {
            startRecording();
        }
    });
    mThread.start();
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    mThread = null;
    super.onDestroy();
}
}

这是我启动和停止服务的代码:

 Button recordAudioButton = (Button) findViewById(R.id.recordAudioButton);
    recordAudioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            startService(new Intent(getApplicationContext(), RecorderService.class));

        }
    });

    Button buttonPLay = (Button) findViewById(R.id.buttonPLay);
    buttonPLay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            stopService(new Intent(getApplicationContext(), RecorderService.class));

        }
    });

它开始了,但是当我停止服务时它并没有停止。我做错了什么?

问题是虽然你设置了mThread = null;你也需要先停止它。

有关停止线程的更多详细信息,请参阅 android best and safe way to stop thread

例如,尝试将 onStartCommandonDestory 更改为:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    mThread = new Thread(new Runnable() {
        @Override
        public void run() {
            if (Thread.currentThread().isInterrupted()) {
                return;
            }

            startRecording();
        }
    });
    mThread.start();
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    mThread.interrupt();
    mThread = null;
    super.onDestroy();
}