我有一个异步任务,当视图通过onDestoryView()去定向时,我取消了这个任务。这个问题是我做了"downloader.cancel(true);“,它不会取消。实际上,它将返回false。目前,它引用ListAdapter来向其中添加项。但是,当我将屏幕转到横向时,在onPostExecute期间ListAdapter为空。我不知道ListAdapter什么时候变成空的。我已经尝试过onDestory和onDestoryView在ListAdapter变为null之前取消异步任务,但都不起作用。这是在ListFragment btw中。
目前,我只是检查asynctask中的适配器是否为空,但这真的很麻烦。我宁愿在ListAdapter为空之前取消任务。
有人知道在屏幕旋转过程中ListFragment的ListAdapter何时为空吗?
发布于 2012-02-03 01:17:17
取消AsyncTask并不会终止线程。您将在Thread的文档中看到stop
和destroy
等方法未实现。因此,一旦doInBackground方法开始执行,即使使用cancel(true)取消了任务,它也会一直运行到完成。您需要对其进行适当的编码。
发布于 2012-02-02 21:37:30
当屏幕方向改变时,默认行为是销毁活动并重新创建它。因此,将调用OnDestroy和OnCreate方法。您可以取消此行为,将此行添加到您的清单的活动中:
android:configChanges="keyboardHidden|orientation“
就像这样:
<activity
android:name=".YourActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation" >
您还需要在activity类中添加方法onConfigurationChanged。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); // tem que ter
reconfiguraInterface();
}
在此之后,当方向更改时,将不会调用OnDestroy和OnCreate。
https://stackoverflow.com/questions/9119741
复制相似问题