我有一个应用程序,它通过片段容器(在选项卡上)打开几个片段(实际上是 3 个),第一个片段使用 AsyncTask 将提要下载到应用程序中。屏幕旋转时会出现问题 - 应用程序崩溃。我通过将 PostExecute 中的数据加载到私有静态变量中来临时处理这个问题,但是当用户第一次进入应用程序时,仍然会出现这个问题。
这似乎是一个非常普遍或猖獗的问题,但我无法在这里找到彻底的解决方案。我确实理解这是因为屏幕旋转导致配置更改,因为 AsyncTask 在与 UI 线程并行的线程上运行。在这个阶段我确实避免使用 Java 线程/执行程序/执行程序服务,因为 AsyncTask 中似乎有一个现成的工具
我无法中断进程以成功重新启动活动或片段并丢弃初始的后续 AsyncTask 调用..
换句话说,当屏幕旋转等配置发生连续变化时,如何销毁片段中的 AsyncTask。您的帮助将不胜感激。
public class MolyListFragment extends Fragment {
public final static String MOLY_ARTICLE_DATA = "No Details";
private static final String TAG = "MOLY";
private static ArrayList<MolyPg> mMolyPgs = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mMolyPgs == null) {
new MolyLoadTask().execute(getResources().getString(R.string.mly_feed));
}
else
displayMlicles (mMolyPgs); //this displays the arrayList out of static mMolyPgs
}
private class MolyLoadTask extends AsyncTask<String, Void, ArrayList<MolyPg>> {
@Override
protected ArrayList<MolyPg> doInBackground(String... urls) {
String myUrl = urls[0];
ArrayList<MolyPg> myMlPgs = null;
try {
myMlPgs = loadXmlFromNetwork(myUrl);
} catch (MalformedURLException e) {
Log.d(TAG, "MalformedURLException", e);
} catch (IOException e) {
getResources().getString(R.string.connection_error);
} catch (XmlPullParserException e) {
getResources().getString(R.string.xml_error);
}
return myMlPgs;
}
@Override
protected void onPostExecute(ArrayList<MolyPg> result) {
super.onPostExecute(result);
Do some acrobatics here
}
........
}
}