2017-01-08 6 views
1

サービスを開始し、オーディオを録音してからアクティビティを終了しますが、録音を続けてから、アクティビティを開いて録音を停止します。コントロールオーディオを録音中のサービス

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)); 

     } 
    }); 

それが起動しますが、私はサービスを停止すると、それは停止しない:これは私のコードが起動し、サービスを停止することです

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(); 
} 
} 

この

は私のサービスです。私は間違っているの?

+0

あなたはサービスが停止しないことを理解するにはどうすればよいですか? – Divers

答えて

1

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(); 
} 
+0

これは 'if(Thread.currentThread()。isInterrupted())'をチェックします - そのコードの場所ではほとんど無意味です – Divers

関連する問題