我有一个关于在Android中经常出现的简单情况的问题。
我们有一个主活动,我们调用一个AsyncTask并带有MainActivity的引用,以便AsyncTask可以更新MainActivity上的视图。
我将事件分解为以下步骤:
- MainActivity创建AyncTask,传递其引用。 - AysncTask开始工作,例如下载十个文件。 - 用户更改了设备的方向。这会导致AsyncTask中的孤立指针。 - 当AsyncTask完成并尝试访问活动以更新状态时,由于空指针而崩溃。
以上问题的解决方法是在AsyncTask中保留弱引用,正如《Pro Android 4》书籍推荐的那样。
我们有一个主活动,我们调用一个AsyncTask并带有MainActivity的引用,以便AsyncTask可以更新MainActivity上的视图。
我将事件分解为以下步骤:
- MainActivity创建AyncTask,传递其引用。 - AysncTask开始工作,例如下载十个文件。 - 用户更改了设备的方向。这会导致AsyncTask中的孤立指针。 - 当AsyncTask完成并尝试访问活动以更新状态时,由于空指针而崩溃。
以上问题的解决方法是在AsyncTask中保留弱引用,正如《Pro Android 4》书籍推荐的那样。
WeakReference<Activity> weakActivity;
in method onPostExecute
Activity activity = weakActivity.get();
if (activity != null) {
// do your stuff with activity here
}
这种情况如何解决?
我的问题是,如果我的异步任务正在下载十个文件,在完成其中五个后活动会重新启动(因为方向发生了变化),那么我的FileDownloadingTask会再次被调用吗?之前最初调用的AsyncTask会发生什么?非常感谢您,对于问题的长度我感到很抱歉。