【发布时间】:2011-11-03 09:19:10
【问题描述】:
感谢关于轮换更改的 AsyncTask 的大量帖子。使用兼容性库并尝试在onPostExecute 中关闭DialogFragment 时遇到以下问题。
我有一个触发 AsyncTask 的片段,它显示进度 DialogFragment,然后在 onPostExecute 中关闭对话框,然后可能抛出另一个 DialogFragment。
如果在显示进度对话框时我将应用程序置于后台,我的片段会得到以下信息:
1)onPause
2)onSaveInstanceState
3) onPostExecute 我尝试关闭并调用一个对话框。
我收到IllegalStateException 是因为我正在尝试在活动保存其状态并且我理解这一点时有效地提交事务。
在轮换中,我假设(可能是错误的)在重新创建活动之前我不会得到onPostExecute。但是,当将应用程序置于后台时,我假设(绝对错误地)onPostExectute 在片段/活动暂停时不会被调用。
我的问题是,我的解决方案是简单地在onPostExecute 中检测到片段/活动已暂停,并在onResume 中简单地执行我需要做的事情吗?我觉得有点丑。
提前致谢,彼得。
编辑 1
需要支持2.1及以上
编辑 2
我考虑过使用FragmentTransaction:add 和FragmentTransaction:commitAllowingStateLoss 显示对话框,但这并非没有问题。
【问题讨论】:
-
我的blog post 关于片段事务和活动状态丢失可能会有所帮助。 :)
标签: android android-asynctask android-fragments android-lifecycle