Android 必知必会:自定义 View 可以知道 onPause/onResume 被调用了吗?
Posted 他叫自己MR张
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 必知必会:自定义 View 可以知道 onPause/onResume 被调用了吗?相关的知识,希望对你有一定的参考价值。
关键词:自定义View、custom View、Lifecycle、onPause、onResume
如果移动端访问不佳,请访问–> GithubPage 版
先说结论,可以。
在自定义 View 的类中,根据手机系统版本,重写onVisibilityChanged()
或者onVisibilityAggregated()
方法即可。详细判断条件见下文。
如果 Build.VERSION.SDK_INT < Build.VERSION_CODES.N
(手机系统低于 android 7.0)
@Override
protected void onVisibilityChanged(@NonNull View changedView, int visibility)
super.onVisibilityChanged(changedView, visibility);
if (visibility == View.VISIBLE) //onResume() 被调用
//处理动画播放、线程启动、开启定时任务等操作
else // onPause() 被调用
//处理动画的暂停、取消或者线程的暂停、取消、定时任务的暂停、取消等
然后 Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
(手机系统 Android 7.0 及以上)
@Override
public void onVisibilityAggregated(boolean isVisible)
super.onVisibilityAggregated(isVisible);
if (isVisible) //onResume() 被调用
//处理动画播放、线程启动、开启定时任务等操作
else // onPause() 被调用
//处理动画的暂停、取消或者线程的暂停、取消、定时任务的暂停、取消等
上述方案是我翻 Android 源码找到的最简单的方式,灵感来自 ProgressBar 。不需要监听所在 Fragment 或者 Activity 的生命周期。
其他方案参见:Can a custom View know that onPause has been called?
如果有什么建议或者问题可以随时联系我,共同探讨学习:
以上是关于Android 必知必会:自定义 View 可以知道 onPause/onResume 被调用了吗?的主要内容,如果未能解决你的问题,请参考以下文章
Android 必知必会:自定义 View 可以知道 onPauseonResume 被调用了吗?(不依赖Lifecycle)
Android 必知必会:自定义 View 可以知道 onPause/onResume 被调用了吗?(不依赖Lifecycle)