activity生命周期

来源:互联网 发布:审判者极速踢腿宏编程 编辑:程序博客网 时间:2024/06/15 20:15

看了些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 onPause1 onStop1 onDestroy

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

1 onPause1 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 onPause2 onCreate2 onStart2 onResume1 onStop

activity1切换到2,先onPause1,然后创建2,在2onResume之后,1才onStop。
此时已经切换到activity2了,如果此时点击返回,会发生什么呢?
2 onPause1 onRestart1 onStart1 onResume2 onStop2 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 onPause2 onCreate2 onStart2 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.

0 0
原创粉丝点击