質問

私はかなり好奇心が強い問題を抱えています。アプリが開かれたときに、私の主な活動から以下のコードを使用して電話をかけるためのバインドされていないサービスがあります。

//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()の実際のアクションを処理できます。

私はこのように修正した疑似問題を持っていました。多分これもあなたの問題を解決するでしょう。がんばろう。;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top