activity生命周期
来源:互联网 发布:审判者极速踢腿宏编程 编辑:程序博客网 时间:2024/06/15 20:15
看了些activity生命周期的文章,感觉没有特别清楚,有必要自己总结一下,话不多说,神图镇楼,本文将涉及activity切换,home,back,锁屏等各种情况。
预备知识
ActivityState
onResume执行之后,activity进入Resumedstate
onPause执行之后,activity进入PausedState
onStop执行之后,activity进入StoppedState
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导致的
如何判断 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.
一个activity如果在StoppedState被回收了,那么onDestroy不会被调用。
系统优先于回收StoppedState状态的activity.
0 0
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- interface VS abstract class in java
- Android 依赖注入框架 Dagger2使用
- Metatable 对象默认的操作方式
- Java设计模式(六) 模版方法模式详解
- ios学习路线—Objective-C(代码规范)
- activity生命周期
- tomcat配置虚拟主机
- UVA - 11059(暴力水题)
- 3.3.const关键字和指针的纠缠
- Docker CentOS7 LNMP环境yum方式安装
- openvpn access server 一键搭建脚本
- 上半年遇到的一些service绑定失败的分析
- JavaScript闭包--简介
- LeetCode刷题系列(七)Linked List