片段或活动停止后停止所有事件

GLe*_*Lee 2 android android-lifecycle

我遇到一个片段中有两个可点击项的情况。项目A将当前片段与当前活动分离,并附加一个新片段。项目B导致一些UI更新。我的问题是,如果我快速连续单击它们两者,则应用程序崩溃。我在UI更新中得到了NullPointerException,因为显然该片段已经与项目A分离了。更直观的日志表示形式:

  1. 点击项目B
  2. 此后不久单击项目A
  3. 项A导致当前片段分离,并最终导致调用onDestroyView。
  4. 项B尝试在大约150毫秒后更新UI,但是UI元素现在为空,因为onDestroyView已经执行,从而导致NPE。

我正在使用运行4.2.2的Nexus 4。我正在使用Dagger进行依赖项注入,我认为这可能是问题的根源,但我在整个应用程序中看到了类似的边缘情况,其中几乎可以同时单击两件事,而崩溃问题有时会发生。没有注射。在每种情况下,这两种操作都将以看似未定义的顺序发生,这将导致奇怪的行为并崩溃。

有没有办法停止onStop或onDestroyView中的所有后续事件或飞行事件?还是我需要向每个UI侦听器中添加一个isDetached()检查?我还尝试在onDestroy中分离所有侦听器,从而消除了部分但并非全部崩溃。似乎我有一个与此未解决的问题类似的问题:在onDestroyView之后调用Fragment的OnClickListener

Aym*_*oub 5

当您明确完成Activity时,有时需要破坏该片段,因此以下检查将更为通用。

if(getActivity() == null || getActivity().isFinishing() || 
   fragment.isRemoving() || fragment.isDetached() || 
   !fragment.isAdded()) {
   // fragment is stopped
}
Run Code Online (Sandbox Code Playgroud)