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

本文介绍了如何在自定义View中根据Android系统版本差异,正确处理onPause和onResume事件,以优化性能。针对不同SDK版本,提供了相应的方法重写示例,并推荐了相关讨论资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键词:自定义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?

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值