Upv*_*ote 1 java android android-fragments retrofit
我有一个基本上工作正常的片段.在onResume方法中,当用户访问activity/fragment时,我执行api调用以获取新数据.
public void onResume(){
super.onResume();
//in pseudo
do async call
success callback
update ui
failure callback
update ui
}
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都可以正常工作.但是,在更新ui方法完成之前,当用户导航回父活动时遇到问题.更新ui只是设置了一些文本视图.
例如,当用户导航到活动并且片段上面调用onResume时.用户立即返回父活动.异步调用和更新ui尚未完成,我得到:
致命异常:主进程:com.project.foobar,PID:4405 java.lang.IllegalStateException:片段MyDetailFragment {41ebb478}未附加到Activity
这是在成功回调后的更新ui方法中引发的.我使用square的改造来管理api调用.再次,这恰好发生在更新ui尚未完成时.当我等待它完成并返回时一切都很好.
什么想法可能是错的?
当您离开片段时中止异步操作,或者只是isAdded()在您尝试更新UI时检查片段是否仍然附着.如果没有附加,则忽略结果,不要触摸视图.
第一种选择可能是最正确的,但也是最难实施的.第二种选择在我看来完全没问题,除非你在后台线程中做了一些非常繁重且经常运行的东西.