j2e*_*nue 10 android android-lifecycle
我相信onAttachedToWindow在调用onCreate时onAttachedToWindow()被调用.那么我可以假设在活动生命周期中,当活动被销毁时调用onDetachedFromWindow?我的问题是如何将这两个回调钩子绑定到活动生命周期?
我可以说onAttachedToWindow绑定到onCreate而onDetachedFromWindow绑定到onDestroy吗?
Wen*_*hao 14
技术上讲onAttachedToWindow是在之后调用的onResume(并且它仅在每个生命周期中发生一次).
ActivityThread.handleResumeActivitycall将添加DecorView到当前调用的电流WindowManger,WindowManagerGlobal.addView()而不是遍历所有视图并调用onAttachedToWindow每个视图.
onDetachedFromWindow 与...并列 onDestroy
这并不是真正的答案,而是建议......
很多次,我都感到有必要使用此方法(onDetachedFromWindow)来取消注册观察者和/或清除范围......
不要这样做!!
onDetachedFromWindow() 不等于Fragment 的onDestroyView()。
当视图被销毁时,没有专门调用的内部方法(不幸的是)。
当更改 ViewPager/ViewPager2 中的页面时,将调用 onDetachFromWindow(),而视图并未真正被销毁。如果您使用 onDetachFromWindow() 清除范围,您将收到 NullPointerException,或者在滚动回相关页面时视图将停止响应更新。
您可以做的最好和最简单的事情是使用 onDestroyView() 方法来清除范围。
最难/最好的方法是监听片段的生命周期(如果您想要一个一次性实例化的适配器),然后通过适配器向所有观察适配器的视图发送一条“销毁”消息,并使它们自行注销...... .甚至连 DataSetObserver 类也不是为了执行此操作而构建的(当它应该这样做时)。
| 归档时间: |
|
| 查看次数: |
9910 次 |
| 最近记录: |