Android 必知必会:自定义 View 可以知道 onPause、onResume 被调用了吗?
关键词:自定义View、custom View、Lifecycle、onPause、onResume
先说结论,可以。
在自定义 View 的类中,根据手机系统版本,重写onVisibilityChanged()
或者onVisibilityAggregated()
方法即可。详细判断条件见下文。
如果 Build.VERSION.SDK_INT < Build.VERSION_CODES.N
(手机系统低于 Android 7.0)
1 |
|
然后 Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
(手机系统 Android 7.0 及以上)
1 |
|
上述方案是我翻 Android 源码找到的最简单的方式,灵感来自 ProgressBar 。不需要监听所在 Fragment 或者 Activity 的生命周期。
其他方案参见:Can a custom View know that onPause has been called?
更新:2023-02-16
使用 Lifecycle 的方案中,除了直接通过 addObserver()
来被动接收回调外,也可以在需要的地方使用 Lifecycle.getCurrentState().isAtLeast(RESUMED)
方法来主动判断当前 Activity|Fragment 的状态。
其中 Lifecycle 可以通过 Activity|Fragment 的 getLifecycle()
方法获取,在 View 视角,Lifecycle 具备通用性,可以进行一定抽象。
如果有什么建议或者问题可以随时联系我,共同探讨学习: