繁体   English   中英

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

[英]Activity's onDestroy() method not called after removing activity from background by swiping

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

如果使用Home按钮或Back按钮,则会onStop()生命周期的onStop()onPause()方法。 如果我通过从后台onDestroy()出来杀死活动,则不会调用onDestroy()方法。 下次开始我的活动时会调用它。 在Back press的情况下我使用moveTaskToBack(true)

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

onDestroy()文档

注意:不要指望这种方法被称为保存数据的地方! 例如,如果某个活动正在编辑内容提供程序中的数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处。 通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西。 在某些情况下,系统会简单地杀死活动的托管进程,而不会在其中调用此方法 (或任何其他方法 ),因此它不应该用于执行在进程消失后保留的内容。

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

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

我记得在StackOverflow上读过类似的问题。 这是最佳答案:

从任务管理器 处理退出应用程序从任务管理 处理退出应用程序

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM