質問
私はかなり好奇心が強い問題を抱えています。アプリが開かれたときに、私の主な活動から以下のコードを使用して電話をかけるためのバインドされていないサービスがあります。
//some code checks if the service is awake. if not then the code below is called
Intent serviceIntent = new Intent(this, SMS_Listener_Service.class);
startService(serviceIntent);
.
サービスに新しいSMSが入ってきた場合、コンテンツオブザーバーが内部SMS DBにデータを保存していることを確認するためにタイマーを介して3秒間待機します。その後、それは重い持ち上げをするためにインテントサービスを呼びかけます。
未知の理由で、サービスは時々ハングアップして「再起動」(画像を参照) "
好奇心が強いことは、アプリケーションセクションでサービスを停止しようとしていないことを試みることができません。それは一時的に消えてから同じメッセージで再び現れます。コード内のStopServiceを使用していませんが機能し、サービス内のOnDestroyメソッドは呼び出されません。それの周りの唯一の方法は電話を再起動することです。
問題は、この状態にあると機能しない場合(着信SMSメッセージを解析することを意味します)
Android 4.3
のギャラクシー注3でこれを実行しています ""
私の疑いは、実際の解析を行っているインテントサービスが完了していないため、サービスを停止するためのコールは呼び出されません。
私の質問は、停止するために吊り下げられたインテントサービスを強制する方法がありますか?
これはstartCommandのサービス
のコードです。 public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
if (!blnAutoSyncisEnabled) {
stopSelf();
return 0;
} else {
return START_STICKY;
}
}
.
同じ質問の詳細ビューここ https://stackoverflow.com/posts/21077517/edit
解決
これは非常にエレガントなソリューションではないかもしれませんが、サービスのstopSelf()
メソッドで直接onCreate()
を呼び出し、onDestroy()
を呼び出す前にsuper.onDestroy()
の実際のアクションを処理できます。
私はこのように修正した疑似問題を持っていました。多分これもあなたの問題を解決するでしょう。がんばろう。;)