当通过onDestoryView()对视图进行转储时,我有一个异步任务要取消。这个问题是我做"下载取消(真);",它不会取消。事实上,它将返回false。目前,它引用ListAdapter来添加项目。但是,当我将屏幕切换为横向时,在onPostExecute期间,ListAdapter为null。我不知道ListAdapter何时变为null。我已经尝试过onDestory和onDestoryView在ListAdapter变为null之前取消异步任务,但它始终不起作用。这是ListFragment btw.的内部
目前,我只是检查异步任务中的适配器是否为空,但这确实让我很头疼。我宁愿在ListAdapter为null之前取消该任务。
有人知道在屏幕旋转过程中ListFragment的ListAdapter何时为null吗?
取消AsyncTask不会杀死线程。您将在Thread的文档中看到,像stop
和destroy
这样的方法尚未实现。因此,一旦doInBackground方法开始执行,即使使用cancel(true)取消任务,它也会运行到完成。您需要对其进行适当的编码。
当屏幕方向更改时,默认行为是销毁并重新创建"活动"。因此将调用方法OnDestroy和OnCreate。您可以取消此行为,在您的清单的活动中添加此行:
android:configChanges="keyboardHidden|orientation"
比如:
<activity
android:name=".YourActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation" >
您还需要在活动类中添加onConfigurationChanged方法。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); // tem que ter
reconfiguraInterface();
}
之后,当方向更改时,将不会调用OnDestroy和OnCreate。