activity生命周期

看了些activity生命周期的文章,感觉没有特别清楚,有必要自己总结一下,话不多说,神图镇楼,本文将涉及activity切换,home,back,锁屏等各种情况。

预备知识

ActivityState

onResume执行之后,activity进入Resumedstate
onPause执行之后,activity进入PausedState
onStop执行之后,activity进入StoppedState

内存不足的时候,会尝试去杀后台进程,而不会去杀单独的activity。

visible life

onStart和onStop之间,此时activity可见

foreground life

onResume和onPause之间,此时activity在前台


解释


onStart

此时activity已经可见了,只是不在前台,可理解为activity已经显示出来了,只是用户还看不到,还在后台。

onResume

此时activity在前台,在activity栈的栈顶,可以和用户进行交互

onPause

activity即将失去前台地位,有新的前台activity到来,如果想要在onPause或者onStop内做heavy的事情(尽量不要这么做),请选择onStop,因为activity切换的时候,是第一个activity onPause之后,第二个activity才显示,然后才调第一个activity的onStop.如果onPause做了比较多的事情,那么activity切换就会慢。而onStop调用的时候,第二个activity已经显示出来了。只要被部分遮盖了,就会调用onPause。
往往在这个方法里做一些数据保存,动画停止的工作.这里是一个activity可以保证在死亡之前达到的回调。activity被回收的时候,onStop和onDestroy还没走到,那也就不会去走。如果对数据非常敏感,那么请在onPause这里保存数据。
onPause被调用的原因,一般只有2个,第一,activity切换,即将有个activity来到前台, 第二,调用了finish(),在activity是Resumedstate的时候调用finish()会导致onPause,onStop,onDestroy被调用。
如何判断 onPause 是怎么引起的呢?可以在onPause调用isFinishing(),为true,那说明是finish导致的

onStop

此时activity已经完全不可见了


单activity

点击图标进入界面

 1 onCreate
 1 onStart
 1 onResume

点击back退出界面

1 onPause
1 onStop
1 onDestroy

重新进入此界面,然后点击home键会发生什么事呢?

1 onPause
1 onStop

切换回界面

 1 onRestart
 1 onStart
 1 onResume

锁屏的和按home键是类似的,锁屏会调用onPause和onStop,解锁会调用onRestart,onStart,onResume


旋转屏幕,相当于重新创建了个activity

 1 onPause
 1 onStop
 1 onDestroy
 1 onCreate
 1 onStart
 1 onResume


activity切换

普通activity

1 onPause
2 onCreate
2 onStart
2 onResume
1 onStop

activity1切换到2,先onPause1,然后创建2,在2onResume之后,1才onStop。
此时已经切换到activity2了,如果此时点击返回,会发生什么呢?
2 onPause
1 onRestart
1 onStart
1 onResume
2 onStop
2 onDestroy

可以看到此时2的onStop依然是在1的onResume,此时我们可以得出一个结论,2个activity切换的时候,必然是1个activity要消失(activity A),一个要出现(activity B),必然是先调用A的onPause,然后B会逐渐出现,直到onResume之后,才调用A的onStop

非完全覆盖activity及透明activity

如果跳转到一个不完全覆盖的activity呢?又有什么区别?(ps如何创建一个不完全覆盖的activity呢? android:theme="@android:style/Theme.Dialog")
1 onPause
2 onCreate
2 onStart
2 onResume
看看区别,少了个onStop,为什么呀?activity并没有完全消失,只有activity完全消失了才会掉onStop,这下我们可以理解为什么刚才B onResume之后才会调A的onStop,因为此时A才完全不可见。
跳转到透明的activity的情况和这个一样,如何搞一个透明activity呢?android:theme="@android:style/Theme.Translucent.NoTitleBar"或者android:theme="@android:style/Theme.Translucent"

系统回收

当系统很缺资源的时候,有可能会使用finish()终止PausedState或StoppedState的activity,甚至系统可能直接杀死进程.无论哪种方式只要是系统干掉的,下次点击的时候系统会自动重新创建并恢复那个activity。
一个activity如果在PausedState被回收了,那么onStop,onDestroy都不会被调用
一个activity如果在StoppedState被回收了,那么onDestroy不会被调用。
系统优先于回收StoppedState状态的activity.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值