Activity生命周期,学习笔记(踩过的坑)
Posted 夜尽天明89
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:毫秒值
延迟一点时间后,再执行相关功能
以上是关于Activity生命周期,学习笔记(踩过的坑)的主要内容,如果未能解决你的问题,请参考以下文章