复习 activity 的生命周期 手机锁屏时生命周期变化

转自:http://blog.csdn.net/qq_35366908/article/details/72764184

onCreat() 不可见不可交互 创建时调用

onStart()是activity界面被显示出来的时候执行的,用户可见,包括有一个activity在他上面,但没有将它完全覆盖,用户可以看到部分activity但不能与它交互      创建时或者从后台重新回到前台时调用


下面这三个状态是静态(static)的,意味着activity只有在这三个状态下能停留一段时间:

onResume()是该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。

                       创建或者从被覆盖、后台重新回到前台时被调用  

onPause() 可见不可交互(部分可见),不能接收用户输入也不能执行代码,另一个半透明或者小的activity正挡在前面。

                                                被覆盖到下面或者锁屏时被调用  

onStop() 不可见不可交互失去焦点,activity完全被遮挡,不能被用户看到,activity被认为在background,当Stopped的时候,activity实例的状态信息被保留,但是不能执行任何代码。

                                                 退出当前Activity或者跳转到新Activity时被调用  


onRestart() 从不可见到可见    

onDestory() 销毁activity         退出当前Activity时被调用,调用之后Activity就结束了

还是上图吧:



介绍一下集中情况的生命周期的调用,我在Myapplication添加了监测activity生命周期的回调方法(可参考http://blog.csdn.net/tongcpp/article/details/40344871),最近在看kotlin 所以不是用的Java代码,不过测试代码很简单,这里就不转为Java来看了,看一下我的application代码

onRestart() 方法在这个回调中没有就添加到了activity内部

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
           
           
class Myapplication : Application() {
override fun onCreate() {
super.onCreate()
this.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
override fun onActivityResumed(activity: Activity?) {
/**
* 打印出activity的名称和生命周期方法
*/
Log.e("Activity Life", "${activity?.localClassName} onActivityResumed ")
}
override fun onActivityStarted(activity: Activity?) {
Log.e("Activity Life", "${activity?.localClassName} onActivityStarted")
}
override fun onActivityDestroyed(activity: Activity?) {
Log.e("Activity Life", "${activity?.localClassName} onActivityDestroyed")
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
Log.e("Activity Life", "${activity?.localClassName} onActivitySaveInstanceState")
}
override fun onActivityStopped(activity: Activity?) {
Log.e("Activity Life", "${activity?.localClassName} onActivityStopped")
}
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
Log.e("Activity Life", "${activity?.localClassName} onActivityCreated")
}
override fun onActivityPaused(activity: Activity?) {
Log.e("Activity Life", "${activity?.localClassName} onActivityPaused")
}
})
}
}
 来自CODE的代码片
snippet_file_0.txt

 目前我的MainActivity随便写了点代码,启动APP,看日志

情景一:启动MainActivity 的时候调用的生命周期方法结果如下


create--->start--->resume

情景二(三星手机为例):此时手机进入锁屏状态调用的生命周期方法结果如下


pause--->stop

 随后打开锁屏


restart--->start--->resume


其它:锁屏时只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()


情景三:直接按home返回主界面


pause--->stop

再次打开app


restart--->start---resume

情景四:按back键返回主界面


puse--->stop--->destory

这是可以看到activity直接销毁了,毫无疑问再次打开APP的时候activity就调用了和情况一启动是相同的方法

情景五:启动另一个activity



可以看见MainActivity首先进入pause状态,新activity启动,原activity进入stop状态,此时按back键返回MainActivity


情景六:在MainActivity运行状态下有电话打来,生命周期是如何调用的呢?下面看一下测试结果


挂断电话后回到该界面调用的方法


restart--->start--->resume


情景七:看一下activity弹出dialog时生命周期是怎么调用的吧!!!大笑大笑大笑想到的情况有限,可能会一直补充的

稍候加,想集成个dialog去测试

测试结果空空如也( ⊙ o ⊙ )!

发现dialog在依赖activity显示和消失的过程中不调用任何生命周期方法



情景八:横竖屏切换

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法(据说用模拟器是这个结果)


但我用OPPO7 真机测试发现上述三种情况都掉用了一次生命周期,且屏幕切换的时候原有的activity是被销毁了的,而重新创建了一个,就想不销毁之前的activity,然后找到 了这个http://blog.csdn.net/javensun/article/details/6793552  ,我没有时间去测试,等测试了在附上结果



除去上述生命周期以外,还有几个方法onWindowFocusChanged、onSaveInstanceState、onRestoreInstanceState方法

onWindowFocusChanged()    在 Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后调用

          例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity。以上几种情况都会调用onWindowFocusChanged,并且当Activity被创建时是在onResume之后被调用,当Activity被覆盖或者退居后台或者当前Activity退出时,它是在onPause之后被调用

onSaveInstanceState()            Activity被系统杀死时被调用.例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死. 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态.在onStop()之前被调用

onRestoreInstanceState()       Activity被系统杀死后再重建时被调用. 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity. 这两种情况下onRestoreInstanceState都会被调用,在onStart之后. 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值