は、私はこのようなマニフェストで私のサービスを宣言します。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
のために)タスクが停止した直後に再起動されます。
このhttps://stackoverflow.com/questions/20677781/in-android-4-4-swipingを参照してください。 -app-out-of-recent-tasks-permanently-kills-application-wi 100%あなたに役立ちます.. –