2016-05-03 9 views
2

は、私はこのようなマニフェストで私のサービスを宣言します。Recentsからアプリをスワイプするとサービスが停止するのはなぜですか?

<service 
    android:name=".MyService" 
    android:stopWithTask="false" /> 

MyService.java:私は更新ムービーからアプリをスワイプ

public class MyService extends Service { 

    private final BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // doing stuff 
     } 
    }; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

    @Override 
    public void onCreate() { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(Intent.ACTION_TIME_TICK); 

     registerReceiver(receiver, filter); 
    } 

    @Override 
    public void onDestroy() { 
    // does not get called 
     unregisterReceiver(receiver); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onTaskRemoved(Intent rootIntent) { 
     // this method get called when i remove the task from recents 
    } 
} 

は、onTaskRemoved実行は予想通り、しかしBroadcastReceiver " s onReceiveメソッドはもはや呼び出されません。

私が知る限り、registerReceiverで動的に登録されたBroadcastReceiverの生存期間は、それを登録したオブジェクトに関連付けられています。私はこのため、もし私のServiceがまだ動いているとすれば、onReceiveが呼び出されるはずです。

Serviceが停止しているか、またはBroadcastReceiverが登録抹消されているかわかりません。

いずれにしても、タスクを後から削除したときに、どのように停止するのを防ぐことができますか?私はできない場合、すぐに再起動する方法はありますか?

編集:

私はかなり確信している私のService OSは、(それが原因START_STICKYを停止した場合に行うことになったように)問題があることを意味する、それを再起動しようとしていないので、まだ、実行されていますBroadcastReceiverは登録されていません。どうして? (onDestroyが呼び出されません)

EDIT2:

は、問題を発見しました。それは私がテストしていたデバイスです。私はMIIA android ROMでXiaomi Redmi Note 2を使用していました。 MIUIのrecentsからスワイプアウトすると、OSはタスクだけでなく、プロセス全体を殺します(タスク・キラーのように)。 Serviceを他のデバイスでテストすると、(START_STICKYのために)タスクが停止した直後に再起動されます。

+0

このhttps://stackoverflow.com/questions/20677781/in-android-4-4-swipingを参照してください。 -app-out-of-recent-tasks-permanently-kills-application-wi 100%あなたに役立ちます.. –

答えて

関連する問題