MainActivity中何时及为何需要重写onResume方法?
Android onResume方法重写问题解答
哪些场景必须重写onResume
onResume是Activity进入「可与用户交互」状态的节点回调,只要需求涉及「页面离开可交互状态时做了释放/暂停操作,回来时需要恢复/刷新」,就必须重写该方法,常见场景包括:
- 动态内容刷新:从其他页面返回、APP从后台切回前台时,需要同步实时变化的数据,比如订单状态更新、聊天未读消息数、当前定位信息、权限变更后的功能状态。
- 前台专属资源初始化:相机预览、传感器监听(摇一摇、步数统计、光线感应)、仅前台生效的广播接收器/事件回调,这类资源如果在页面不可见时持续持有,会造成额外耗电、内存泄漏,常规做法是在onPause阶段注销/释放,回到onResume时重新注册/初始化。
- 交互状态恢复:页面切走时暂停的视频播放、属性动画、游戏渲染循环,回到前台需要自动续播/恢复运行的逻辑,要放在onResume中实现。
为什么实际开发中有时不需要重写
Activity父类默认的onResume实现已经完成了所有系统层面的必要工作:包括恢复窗口焦点、衔接输入事件队列、同步视图可见状态,只要你没有上述自定义的恢复/刷新需求,完全不需要重写这个方法。
比如纯静态展示的关于页、用户协议页,内容在Activity创建后就不会变动,也不持有独占资源、不需要监听实时事件,额外重写onResume只会增加冗余代码,没有任何实际收益。
重写注意事项
重写onResume时必须保证第一行调用父类实现,自定义逻辑写在super调用之后,否则会出现系统状态异常,比如输入框无法获取焦点、返回键事件分发错乱。标准写法参考:
@Override protected void onResume() { super.onResume(); // 自定义刷新、资源初始化逻辑写在这里 }
另外注意不要把只需要执行一次的初始化逻辑(比如布局加载setContentView、控件绑定、ViewModel初始化)放在onResume中——这个回调在Activity整个生命周期中会随着页面切走、切回多次触发,放错位置会导致逻辑重复执行。
内容的提问来源于stack exchange,提问作者nano tech
相关产品推荐
相关产品推荐

