我正在片段类中的onCreateView()方法内的某个服务器(在后台线程中)发送HTTP请求。 当收到请求时,我检查一些东西并根据我添加一个新片段(通过UI线程中的片段事务)。 我使用支持库
但是,例如,如果用户按下android主页按钮,而请求尚未收到,则片段将暂停或停止状态,然后收到请求,当然会抛出异常(在尝试提交之后。)
我在网上搜索了一些非常好的文章和答案,这些文章和答案与这个问题以及所有与“状态损失”相关的事情都有关。在onSaveInstanceState()被调用之后...... 例如,我读了Alex Lockwood的这篇优秀文章:http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html 以及那些stackoverflow问题/答案:getting exception "IllegalStateException: Can not perform this action after onSaveInstanceState" 并且:"Can not perform this action after onSaveInstanceState" - why am I getting this exception from my activity's onResume method?等等。
但我无法得出在我的案例中该怎么做的结论。 我想到的唯一一件事就是使用commitAllowingStateLoss()而不是commit(),但这会填补hacky而不正确,因为我读到的一些答案总结了它。 还有一个建议是在onCreate()中提交交易因为它安全,但当然它在我的情况下无法工作,所有其他建议对我也没有用。
也许我可以使用一些布尔标志来检查我是否可以进行交易,然后等待片段恢复,如果标志为真,则执行交易。 这填补了很多工作,并且还提出了我需要知道交易是否可以完成的问题(甚至不知道如何检查)。