前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 必知必会:自定义 View 可以知道 onPause/onResume 被调用了吗?(不依赖Lifecycle)

Android 必知必会:自定义 View 可以知道 onPause/onResume 被调用了吗?(不依赖Lifecycle)

作者头像
他叫自己MR.张
发布2022-11-30 15:58:59
4650
发布2022-11-30 15:58:59
举报
文章被收录于专栏:Android必知必会Android必知必会

关键词:自定义View、custom View、Lifecycle、onPause、onResume 如果移动端访问不佳,请访问–> GithubPage 版

先说结论,可以。

在自定义 View 的类中,根据手机系统版本,重写onVisibilityChanged()或者onVisibilityAggregated()方法即可。详细判断条件见下文。

如果 Build.VERSION.SDK_INT < Build.VERSION_CODES.N (手机系统低于 Android 7.0)

代码语言:javascript
复制
@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 及以上)

代码语言:javascript
复制
@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?

如果有什么建议或者问题可以随时联系我,共同探讨学习:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档