【发布时间】:2012-01-27 13:22:42
【问题描述】:
我有一项活动,我在其中收集在线交易的数据。收集完成后,我运行一个后台线程(更具体地说是一个 AsyncTask),它调用 Web 服务并等待其响应,然后将其返回给活动。同时,会出现一个进度对话框。
如果应用程序完成或用户取消,我希望后台进程被取消(但是,我仍然需要通知网络服务),如果活动因配置更改而被破坏,则保留后台进程或 em> 释放内存。我知道我将使用 onRetainNonConfigurationInstance() 将我的活动从 AsyncTask 中分离出来,保留它,然后在下一个活动中重新附加,我已经有了相应的基础设施。我也知道在一些生命周期回调中,isFinishing 方法会告诉我我的应用程序是否正常关闭;而且我相信我也可以在进度对话框的回调中处理用户取消。
我有两个简单的问题:
如果我的活动是 onRetainNonConfigurationInstance() 将被调用 因内存不足而死? (我知道如果原因是 配置更改。)
什么情况(正如开发者指南所强调的那样)没有调用 onStop() 和 onDestroy()? (我想知道我的 处理取消的代码将始终执行。)
总而言之,我可以确定通过执行 onRetainNonConfigurationInstance() 和 onDestroy() 并检查 isFinishing(),在每种情况下,我的后台线程都会得到相应的处理吗?
BONUS 问题:如果我的应用程序由于某种原因被终止(假设是永久终止),我怎样才能为 AsyncTask 提供一种方法来保存响应?我可以在其中保留一个共享偏好的实例并在其中写入数据吗?
【问题讨论】:
标签: android android-asynctask lifecycle