java - TabLayout 中的 AsyncTask
问题描述
我有一个带有 TabLayout 的应用程序。每个选项卡都是一个片段,其中三个包含一个 AsyncTask 用于执行繁重的后台操作。请参见下面的代码示例。backgroundLoadList AsyncTask 正在调用getTabNetworkList以收集 Array 列表中的数据。
现在,我正在启动应用程序,并且由于我是标签下方的一个标签,因此系统已经在后台预加载了下方的标签(setOffscreenPageLimit设置为 1)。如果我然后旋转屏幕,getTabNetworkList在它的操作中间被取消,不再附加到上下文,无法访问 catch 子句中的资源字符串并抛出异常。AsyncTask 在onDestroy中被正确取消。
java.lang.IllegalStateException: Fragment Tab_Network{80b32b2 #2 id=0x7f090030 android:switcher:2131296304:2} 未附加到上下文。
如果我在 catch 子句中对资源字符串进行硬编码,它当然可以工作,但异常仍然存在。
您对我如何摆脱此异常有任何想法吗?非常感谢!
异步任务:
private class backgroundLoadList extends AsyncTask<Void, Integer, ArrayList<CustomDataStructure>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mSpinner.setVisibility(View.VISIBLE);
}
@Override
protected ArrayList<CustomDataStructure> doInBackground(Void... voids) {
ArrayList<CustomDataStructure> result = getTabNetworkList();
return result;
}
@Override
protected void onPostExecute(ArrayList<CustomDataStructure> customDataStructures) {
adapter.listItems.retainAll(customDataStructures);
adapter.listItems.addAll(customDataStructures);
adapter.notifyDataSetChanged();
mSpinner.setVisibility(View.GONE);
super.onPostExecute(customDataStructures);
}
}
检索列表:
private ArrayList<CustomDataStructure> getTabNetworkList() {
CustomDataStructure item;
ArrayList<CustomDataStructure> items = new ArrayList<>();
try {
item = new CustomDataStructure(getResources().getString(R.string.itemDescType), networkRoaming);
items.add(item);
// long list with further items is coded here...
} catch (SecurityException e) {
// Exception occurs on the next line because the context is not available anymore for getting the resources...
item = new CustomDataStructure(getResources().getString(R.string.itemInfo), getResources().getString(R.string.textNotAvailable));
items.add(item);
}
return items;
}
解决方案
推荐阅读
- javascript - 与 ARRAYFORMULA 一起使用的自定义表格功能
- python - 如何生成与父进程具有相同参数的 Python 多进程?
- azure-functions - Azure Functions 消耗计划和冷启动成本
- mysql - 在每列都必须支持排序的排行榜表中存储数据的最佳方式是什么?
- r - 添加具有独特颜色和大小的自定义轴标签
- html - CSS -webkit-box-shadow 在 Microsoft Edge 中不起作用
- json - 如何在 PowerShell 中解析嵌套的 JSON?
- keycloak - Keycloak startTLS openldap 用户凭据失败
- mongodb - 尝试将集群连接到应用程序
- python - 在实现胶囊网络时,由于通道数的变化,我遇到了运行时错误