通过滑动从后台删除活动后未调用Activity的onDestroy()方法

时间:2016-06-30 08:45:12

标签: android

我已在ActivityLifecycleCallbacks类中的私有类中实现了Application

如果使用“主页”按钮或“后退”按钮,则会调用生命周期的onStop()onPause()方法。如果我通过从后台向外扫描来终止活动,则不会调用onDestroy()方法。下次开始我的活动时会调用它。我正在使用moveTaskToBack(true)进行背压。

当我们从后台滑出时,应该是什么问题以及应该调用哪个生命周期方法?

3 个答案:

答案 0 :(得分:4)

来自onDestroy()的{​​{3}}:

  

注意:不要指望将此方法称为保存地点   数据!例如,如果活动正在编辑内容中的数据   提供者,这些编辑应该在onPause()或   onSaveInstanceState(Bundle),不在这里。这种方法通常是   实现释放资源,如与线程相关联的线程   活动,以便被破坏的活动不会留下这样的东西   当其余的应用程序仍在运行时。 有   系统将简单地杀死活动的主机的情况   进程中没有调用此方法(或任何其他方法),所以它   不应该被用来做那些打算留下来的东西   过程消失后。

这种情况是将应用程序从最近的任务列表中删除。

查看 documentation ,了解如何在应用程序被淘汰的时候收到通知。

答案 1 :(得分:1)

我记得在StackOverflow上阅读类似的问题。以下是最佳答案:

从任务管理器处理退出应用程序 Handle exit application from Task Manager

  

不幸的是,处理这种情况并不是一个好的答案。如果应用程序被强制终止,则不必调用onDestroy方法。根据文件。

     

注意:不要指望将此方法称为保存数据的地方!例如,如果某个活动正在内容提供程序中编辑数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处。

     

如果可以,请在onPause()方法中进行清理。为了让用户进入该屏幕以杀死应用程序,它必须已经后台化,因此将调用onPause()。 (见文件)

答案 2 :(得分:1)

从后台滑动应用程序,即从最近清除应用程序会导致整个进程和任务被终止,并且可能无法调用时间onDestroy(),当用户从某个活动中退回时,只有该活动被杀死而不是该进程被杀死