Android:当我从最近的应用程序buttonclosures应用程序时,不会调用OnDestroy

当我们按这个button

我们看到我们没有closures的应用程序,就像这样

但是当我们想从这个屏幕(下图)closures一个应用程序时,方法onDestroy()不会被调用,但是应用程序是closures的。 我需要在应用程序以这种方式closures时调用onDestroy()。 我怎样才能做到这一点?

Solutions Collecting From Web of "Android:当我从最近的应用程序buttonclosures应用程序时,不会调用OnDestroy"

如Android文档中所指定的,不保证在退出应用程序时将调用onDestroy()。

“在某些情况下,系统会简单地杀死活动的托pipe过程而不调用此方法”

https://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29

相反,您可以创build一个服务,当您的活动在里面运行的任务被破坏时,将会收到通知。

创build服务类:

 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()来销毁服务之前,您可以在这里运行您的closures应用程序逻辑。

您应该阅读关于Activity生命周期的一些信息。 关于onDestroy方法有一点,它并没有被全部调用。 你不能依靠它。

请指定你想要达到什么目的,我会尽力提供更好的解决scheme。

build议

所以,如果我理解你的话,我可以提出一件事。 启动一个Service将每N秒LocalBroadcast一次LocalBroadcast (这对系统来说并不是很重)。 在“ Activities为此广播注册和BroadcastReceiver 。 这样,你会得到truefalse取决于是否有任何BroadcastReceiver可以赶上你的LocalBroadcast 。 如果没有收件人检查一些SharedPreferences值,指示是否按下Button

你的问题是,onDestroy只在一个Service被调用。 在一个Activity ,被调用的方法是onPause()简单地放在你的Activity的字段中:

 @Override public void onPause() { //Put your Code here }