用于取消AsyncTask的ListAdapter生命周期和屏幕轮换



当通过onDestoryView()对视图进行转储时,我有一个异步任务要取消。这个问题是我做"下载取消(真);",它不会取消。事实上,它将返回false。目前,它引用ListAdapter来添加项目。但是,当我将屏幕切换为横向时,在onPostExecute期间,ListAdapter为null。我不知道ListAdapter何时变为null。我已经尝试过onDestory和onDestoryView在ListAdapter变为null之前取消异步任务,但它始终不起作用。这是ListFragment btw.的内部

目前,我只是检查异步任务中的适配器是否为空,但这确实让我很头疼。我宁愿在ListAdapter为null之前取消该任务。

有人知道在屏幕旋转过程中ListFragment的ListAdapter何时为null吗?

取消AsyncTask不会杀死线程。您将在Thread的文档中看到,像stopdestroy这样的方法尚未实现。因此,一旦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。

相关内容

最新更新