"クラッシュ"した後、サービスが自動的にActivityManagerによって再起動されないようにする方法はありますか?いくつかのシナリオでは、私は強制的にプログラムの終了時に私のサービスを殺すが、Androidがそれを再開し続けるのを望まない。Android:クラッシュ後にサービスが再起動されないようにするにはどうすればよいですか?
答えて
サービスはSharedPreferencesに値を格納できます。たとえば、サービスの開始時に毎回次のような情報を保存できます。 store( "serviceStarted"、1);
サービスがregularyを終了すると(メッセージを送信する)、次の値を上書きします。 store( "serviceStarted"、0);
サービスが次回再起動したときに、serviceStartedの値が「1」であることが検出された場合、サービスが停止していないことを意味し、自身を再起動しました。これを検出すると、あなたのサービスは次の呼び出しを行うことができます:stopSelf();それ自体をキャンセルする。
詳細については: http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle
この動作は、お使いのService
実装でonStartCommand()
の戻り値によって定義されます。定数START_NOT_STICKY
は、プロセスが「強制終了」している間に実行されている場合、サービスを再起動しないようにAndroidに指示します。言い換えれば:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We don't want this service to continue running if it is explicitly
// stopped, so return not sticky.
return START_NOT_STICKY;
}
HTH
解決策としてマークされていませんが、これは正解です – scooterman
未解決のインテントがある場合は動作しません。私はその問題を抱えており、上記のアプローチはうまくいかない。以下のアプローチはより良い選択肢かもしれませんが、まだ実装していません。スタックオーバーフローで提案された他のアプローチを試しましたが、まだ成功していません。 –
@BrianReinholdあなたの問題は、この質問に特定のひねりがあるように聞こえます。ユースケースとあなたが観察した問題について説明した記事を投稿しましたか?私はそれをもっと調べることに興味があるだろう。 – Devunwired
ここで私はそれが他の誰かを助けることができる場合に思い付いたソリューションです。私のアプリはまだSTART_NOT_STICKY
であっても再開しました。だから代わりに私は、目的がnull
であるかどうかをチェックする。これは、サービスがシステムによって再開されたことを意味する。
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
// Ideally, this method would simply return START_NOT_STICKY and the service wouldn't be
// restarted automatically. Unfortunately, this seems to not be the case as the log is filled
// with messages from BluetoothCommunicator and MainService after a crash when this method
// returns START_NOT_STICKY. The following does seem to work.
Log.v(LOG_TAG, "onStartCommand()");
if (intent == null) {
Log.w(LOG_TAG, "Service was stopped and automatically restarted by the system. Stopping self now.");
stopSelf();
}
return START_STICKY;
}
ありがとう!私は頻繁な位置更新を取得し、サービスからサーバに送信する必要がありました。アプリケーションが終了するたびに場所の更新を受信しなくなりました.2日間の苦労の後、私はあなたの答えに達し、あなたのコードを微調整しました。今のところ10秒の遅れです。そして、これは非常にうまくいっており、現在サービスからのロケーション更新を継続的に取得しています。どうもありがとう! – manoj
- 1. アクティビティが再び起動されないようにするにはどうすればよいですか?
- 2. サービスがAndroidで再起動しないようにします
- 3. ドライバの再起動後にDAGが再計算されないようにするにはどうすればよいですか?
- 4. アプリの再起動後に子フラグメントが自動的に作成されないようにするにはどうすればよいですか?
- 5. アクティビティがタスクスイッチャから掃除された後にサービスが再開されないようにするにはどうすればよいですか?
- 6. アプリの起動時にAndroidサービスを起動するにはどうすればよいですか?
- 7. DefaultMessageListenerContainerが自動的に起動しないようにするにはどうすればよいですか?
- 8. サービスによって起動されるダイアログを作成するにはどうすればよいですか?
- 9. デバイスを再起動せずにアプリシステムを再起動するにはどうすればよいですか?
- 10. C#モバイルアプリケーションを再起動するにはどうすればよいですか?
- 11. スプールプリンタを再起動するにはどうすればよいですか?
- 12. スクリプトを再起動するにはどうすればよいですか?
- 13. 再起動時にglassfishを起動させるにはどうすればよいですか?
- 14. ScheduledToastNotificationがUWPでアプリケーションを起動しないようにするにはどうすればよいですか?
- 15. ドッキング・コンテナをクラッシュさせずにapache2を再起動するにはどうすればいいですか?
- 16. ボタンが自動的に押されないようにするにはどうすればよいですか?
- 17. 最後のフォームが削除されないようにするにはどうすればよいですか?
- 18. 再起動後にlocalStorageから値を削除するにはどうすればよいですか?
- 19. Android:再インストール中にデータを失わないようにするにはどうすればよいですか?
- 20. Richfaces popupPanelがJavaScriptで移動されないようにするにはどうすればよいですか?
- 21. AndroidでデバイスのMediaStoreを再起動せずに更新するにはどうすればよいですか?
- 22. 再起動後にWindowsサーバーが使用可能になっているかどうかを検出するにはどうすればよいですか?
- 23. 権限に関係なく、WindowsフォームアプリケーションがWindowsサービスを再起動できるようにするにはどうすればよいですか?
- 24. componentWillUpdateが無限ループを起こさないようにするにはどうすればよいですか?
- 25. 選択を完了した後、メニュープログラムを再起動させるにはどうすればよいですか?
- 26. facebook-ios-sdkのようなアプリを再起動するにはどうすればいいですか?
- 27. 値が移動されないようにするにはどうすればよいですか?
- 28. 配備後にwebjobsを再起動するにはどうすればよいですか?
- 29. サービスを起動せずにglobal.asaxからサービスを開始するにはどうすればよいですか?
- 30. ブラウザをクラッシュさせないようにするにはどうすればよいですか?
サービスのスケルトン実装を表示します。 –
通常のサービスかIntentServiceですか? –