dvd*_*dvd 4 android illegalstateexception android-fragments android-activity
道歉这是一个相当长的帖子,让我先尝试解释一下背景:
我已经阅读了很多关于这个主题的帖子(以及Alex关于这个主题的优秀博客文章),一般的结论似乎不是在异步回调中执行片段事务(参见Dianne的帖子),比如AsyncTask#onPostExecute().
但是我有2个案例需要这样做:
一个Activity示出的登录Fragment,当用户按下登录按钮,一个AsyncTask开始于服务器进行认证,则返回登录成功那么当,登录Fragment被替换为主要的应用程序Fragment.
一个Activity示出了主要的应用程序片段,当使用者触发,需要登录一些动作,登录片段替换被添加到堆栈中的主要片段.再次按下登录按钮时,AsyncTask使用服务器进行身份验证,然后当登录成功时,我们要弹出backstack以Fragment向用户显示主要内容并让他们执行他们想要执行的操作.
案例1可以通过使用来解决commitAllowingStateLoss,但案例2很棘手,因为没有这种风格的popBackStack FragmentManager.
在任何情况下,这两种情况都需要特殊处理应用程序进入后台AsyncTask#doInBackground(),导致onPostExecute()应用程序在后台时被调用.一种解决方案是使用Fragment.isResumed来保护替换片段或pop backstack,然后通过再次登录来处理进程被杀死的情况,或者保存一些指示成功的最近登录的标志并在应用程序恢复状态下替换/弹出登录片段(登录Fragment已恢复到顶部FragmentManager).或者允许状态丢失,并处理进程终止然后恢复的情况,检查最近登录并删除登录片段.
这是你如何处理这个?感觉就像处理一个非常常见的情况需要做很多工作.
最近的解决方法是FragmentActivity.onStateNotSaved()之前打电话popBackStack().
| 归档时间: |
|
| 查看次数: |
2722 次 |
| 最近记录: |