【发布时间】:2014-02-19 12:26:37
【问题描述】:
有一个带有“提交”操作的片段页面。 提交按钮将启动 AsyncTask.execute,在 doInBackground 中创建一些网络作业,然后将显示成功 Toast 消息并在 onPostExecute 中删除自身。
在 onPostExecute 发生时屏幕已经关闭的情况下,如何避免“IllegalStateException: Can't perform this action after onSaveInstanceState”?
是否可以等待popBackStack()或onBackPressed()等操作在锁定活动状态下无法完成?
PS 当前问题与屏幕旋转或其他配置更改事件无关。
代码示例(片段中的 AsyncTask):
private final class SubmitTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
//...
}
@Override
protected void onPostExecute(String err) {
if (err != null) {
Toast.makeText(parentActivity, "Error occured: " + err, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(parentActivity, "Saved", Toast.LENGTH_SHORT).show();
parentActivity.getSupportFragmentManager().popBackStack();// <<---- Exception crashed here
}
}
【问题讨论】:
-
在您的 Toast 命令中,不要使用当前上下文,而是使用 getApplicationContext() 并查看这是否可以防止异常
-
不,不是 - 问题可能不在于 toast,而在于调用 onSaveInstanceState() 后的一些 UI 交互,因此活动处于非法状态以执行此类操作。跨度>
-
IllegalStateException是由fragmentManager.popBackStack()引起的,用于关闭当前fragment并返回上一个。
标签: android android-fragments android-asynctask