私はこのようなサービスを持っています (これは実際のサービスではなく、私の問題を説明するためのものです)。
public class UploadService {
private BlockingQueue<UploadData> queue = null;
private UploadInfoReceiver receiver = null;
public void onStart(...) {
queue = new LinkedBlockingQueue<UploadData>();
(new Processor()).start();
// creating and reigtering receiver
}
public void onDestroy() {
queue.add(new ServiceDestroyedData());
// unregistering the receiver
}
private class Processor extends Thread() {
public void run() {
while (true) {
UploadData data = queue.take();
if (data instanceof ServiceDestroyedData) {
return;
}
// processing data
}
}
}
private class UploadInfoReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
queue.add(new UploadData(/* getting data from intent */));
}
}
}
そして、私の問題は、アプリで次のようなことをすると:
if (!isUploadServiceRunning()) {
// start the Service
}
次に、サービスを開始しますが、アプリをバックグラウンドに移動してタスクマネージャー (android 4.2.2) を開き、アプリを強制終了すると、Android がサービスを再起動すると、まったく新しいインスタンスが作成されることがわかります。以前の Service インスタンスに対して onDestroy が呼び出されることはありません。また、以前のプロセッサ スレッドのインスタンスが実行されていないこともわかります。どうすればいいの?onDestroy が呼び出されない場合、Android はどのようにして私のスレッドを停止する必要があることを認識しますか?
回答ありがとうございます。