ただし、この画面(画像の下)からアプリを閉じる場合、onDestroy()メソッドは呼び出されませんが、アプリは閉じられます。この方法でアプリを閉じたときにonDestroy()を呼び出す必要があります。これどうやってするの? -
Androidドキュメントで指定されているように、アプリケーションを終了するときにonDestroy()
が呼び出されることは保証されません。
「このメソッドを呼び出さずに、システムが単にアクティビティのホスティングプロセスを強制終了する状況があります」
https://developer.Android.com/reference/Android/app/Activity.html#onDestroy%28%29
代わりに、アクティビティを実行しているタスクが破壊されたときに通知されるサービスを作成できます。
サービスクラスを作成します:
_public class ClosingService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
// Handle application closing
fireClosingNotification();
// Destroy the service
stopSelf();
}
}
_
マニフェストでサービスを宣言/登録します(アプリケーションタグ内、ただしアクティビティタグ外):
_<service Android:name=".services.ClosingService"
Android:stopWithTask="false"/>
_
_stopWithTask="false"
_を指定すると、タスクがプロセスから削除されたときに、サービスでonTaskRemoved()
メソッドがトリガーされます。
ここで、stopSelf()
を呼び出してサービスを破棄する前に、アプリケーションの終了ロジックを実行できます。
アクティビティのライフサイクルに関する情報を読む必要があります。 onDestroyメソッドには1つのことがあります。常に呼び出されるわけではありません。あなたはそれに頼ってはいけません。
何を達成しようとしているのかを指定してください。より良い解決策を提供しようと思います。
ですから、私があなたを正しく理解していれば、一つのことを提案できます。 N秒ごとにService
を起動するLocalBroadcast
を開始します(システムにそれほど負荷はかかりません)。 BroadcastReceiver
にこのブロードキャストのActivities
を登録してください。このようにして、true
をキャッチできるfalse
があるかどうかに応じて、BroadcastReceiver
またはLocalBroadcast
を取得します。そして、SharedPreferences
が押されたかどうかを示す何らかのButton
値をチェックするレシーバーがない場合。