Activity生命周期,学习笔记(踩过的坑)

关于Activity的生命周期问题,已经是很常见、很简单的问题了,但是偶尔还是会踩坑。这里,做个总结、笔记

1、一个APP启动,启动后退到后台(home键),然后重新打开界面。这个过程是生命周期变化是什么?

这个问题非常简单了

APP启动
onCreate
onStart
onResume

退到后台
onPause
onStop

重新打开
onRestart
onStart
onResume

2、两个界面的跳转呢?
第一个界面,跳转第二个界面startActivityForResult,然后关闭第二个界面,回到第一个界面setResult、finish()

打开APP,展示第一个界面
第一个界面: onCreate
第一个界面: onStart
第一个界面: onResume

跳转第二个界面
15:59:24.062 第一个界面: onPause
15:59:24.101 第二个界面: onCreate
15:59:24.104 第二个界面: onStart
15:59:24.105 第二个界面: onResume
15:59:24.522 第一个界面: onStop

关闭第二个界面,回到第一个界面
16:00:48.703 第二个界面: onPause
16:00:48.718 第一个界面: onActivityResult ; requestCode = 1 ; resultCode = 2
16:00:48.719 第一个界面: onRestart
16:00:48.720 第一个界面: onStart
16:00:48.720 第一个界面: onResume
16:00:49.117 第二个界面: onStop
16:00:49.118 第二个界面: onDestroy

注意:
1、第一个界面的onStop,是在第二个界面展示后,大约400毫秒以后(这里,我的demo是空界面,具体时间,可能和界面复杂度有关)
2、第二个界面回到第一个界面时,onActivityResult 先于onResume处理

为什么呢?看下 onActivityResult 的源码,这个方法上的说明:

......
......

<p>You will receive this call immediately before onResume() when your
activity is re-starting.
你将在onResume()之前立即收到这个电话,当你的
活动重新开始。

<p>This method is never invoked if your activity sets
{@link android.R.styleable#AndroidManifestActivity_noHistory noHistory} to
<code>true</code>.

 ......
 ......

假设现在有个功能需求1:
1、在A界面,有个单词读音功能,要求在界面停止的时候,关闭读音;
2、A界面上,有个按钮,去到B界面,B界面上有个单词,要求界面展示后自动发音。

分析:
1、A界面,界面停止时关闭读音,在 onStop 的时候关闭读音;
2、隐藏条件:项目中,读音控制器,是单例的,只有一个。即:单词A发音时,B单词读音前触发了关闭条件,A单词读音立刻停止

如果功能开发时:
A界面单词正在读音,在A的 onStop 中进行了cancel 操作;跳转到了B界面,B界面单词自动发音,会出现B界面没有读音效果问题。原因就是,A界面的onStop,在B的onResume后执行,B单词正在发音的时候,A把它关了。

解决办法:
B单词界面读音时:

view?.postDelayed({
	......
}, long delayMillis)

delayMillis:毫秒值

延迟一点时间后,再执行相关功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值