Sta*_*tan 13 android activity-lifecycle ondestroy android-asynctask android-activity
更具体地说:在onDestroy中取消任务是否安全?另外,使用onDestroy来取消注册接收器和释放资源是否安全?
我的目的是确保在活动被销毁时取消/销毁我的任务,但不是之前.
的onDestroy():
第一个案例很清楚:我在onDestroy上做了所有的清理,没有出现任何问题.第二种情况虽然有点问题.当Activity被销毁并且onStroy被跳过时(所以我不取消我的任务),是否可能发生任务继续执行,然后完成并尝试更新死活动,以便应用程序崩溃?
我们来到真正的问题:
让我们关注onDestroy(),因为解决方案不在onPause()或onStop()中.参数:
屏幕锁定:设备屏幕锁定时可以调用onPause .这通常就像屏幕保护程序一样,用户立即解锁,因为他站在那里看着屏幕.取消任务并停止我的应用在这种情况下所做的一切只会降低用户体验.我不希望我的应用程序因为偶然的"屏幕保护程序"而窒息而行为不端.
在一个示例应用程序中,我有两个活动屏幕.用户可以在它们之间快速切换.在这个应用程序中,用户倾向于经常快速地切换屏幕.
导航:其中一个屏幕有一个地图,可从系统接收位置更新.它记录了位置(路径)变化的精确图形日志,因此需要不断运行,直到活动关闭.通常我会在onResume和onPause中注册和注销任何接收器.但是,这会使应用程序非常不可用,因为每次用户导航时地图上的更新都会停止.因此,我想取消注册onDestroy中的接收器.
加载列表:第二个屏幕有一个列表,显示来自Web服务的数据.下载数据需要4秒钟.我使用AsyncTask,我知道我应该在必要时取消.它不应该在onPause中取消,因为它应该在用户在屏幕之间切换时继续加载.因此,我想在onDestroy中取消它.
可以有更多的例子.其中一些可能并不完全适合每个人(您甚至可能建议使用服务而不是AsyncTask).但这个想法很重要,所有人都有相同的想法:继续做一些特定于Activity的工作,而Activity 暂停,但是当活动被销毁时,ENSURE停止这样做.(无论我使用的是AsyncTask还是Service,都无关紧要.在任何一种情况下,都应该在Activity被销毁时停止工作.)
PS如果答案是在onDestroy中进行清理是不安全的,这意味着Android框架要求我们停止在onPause中执行的所有操作.然后我就没有看到使用onDestroy的任何理由......
就我用安卓而言,
1当您的应用程序崩溃时,与其相关的所有资源都会被破坏。
2当设备更改配置时,导致 Activity 被销毁并重新创建。
3当应用程序在后台运行时,Android 由于内存不足而杀死它
除了这些之外,还调用其他回调方法,即
1 当另一个活动出现在前面,或者您的设备锁定..等
在所有情况下,根据您的要求,您可以在 onDestroy 中释放所有资源并取消线程和 Asyntask 并停止所有服务等。如果您希望任务在调用销毁时保持暂停和活动状态,那么您可以保存配置并保留它而onCreate则通过检查是否为null而再次调用。
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |