Activity之生命周期和启动模式
来源:互联网 发布:nasa 数据库 故障预测 编辑:程序博客网 时间:2024/05/22 10:57
Activity之生命周期和启动模式
activity类处于android.app包中,继承体系如下:
java.lang.Object
↳
android.content.Context
↳
android.content.ContextWrapper
↳
android.view.ContextThemeWrapper
↳
android.app.Activity
在Android中,Activity的生命周期一直是比较重要的知识点,首先上官方图:
七个周期函数,可以添加log观察周期函数的输出验证生命周期函数的调用时间:
protected void onCreate(Bundle icicle);
protected void onRestart();
protected void onStart();
protected void onResume();//常用来刷新显示数据
protected void onPause();//常用来保存数据,如contentprider,sharedprefer
protected void onStop();
protected void onDestroy();
生命周期总结:
1,在android 中,Activity拥有四种基本状态:
1. Active/Runing一个新Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
2. Paused 当Activity 被另一个透明或者Dialog 样式的Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
3. Stoped 当Activity 被另外一个Activity 覆盖、失去焦点并不可见时处于 Stoped状态。
4. Killed Activity被系统杀死回收或者没有被启动时处于 Killed状态。
2,Activity栈(下面启动模式的基础):
Android 是通过一种 Activity 栈的方式来管理Activity 的,一个Activity 的实例的状态决定它在栈中的位置。处于前台的Activity 总是在栈的顶端,当前台的Activity 因为异常或其它原因被销毁时,处于栈第二层的Activity 将被激活,上浮到栈顶。当新的Activity 启动入栈时,原Activity 会被压入到栈的第二层。一个Activity 在栈中的位置变化反映了它在不同状态间的转换。
Android之Activity的四种启动模式
当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中。Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置启动模式。如下1,2,3都设FirstActivity为当前模式,4设SecondActivity。
1. Standared模式(默认)
我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。
2. SingleTop模式
这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例调用onNewIntent,否则会在任务栈中创建新的实例。
3. SingleTask模式
如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的onNewIntent方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。和下面的singleinstance一样,通常在laucher中使用,避免别的程序使用时产生孤岛,也在开销较大的activity中使用节约内存开销。
4. SingleInstance模式
这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。
我们修改FirstActivity的launchMode="standard",SecondActivity的launchMode="singleInstance"
我们看到从FirstActivity跳转到SecondActivity时,重新启用了一个新的栈结构,来放置SecondActivity实例,然后按下后退键,再次回到原始栈结构;图中下半部分显示的在SecondActivity中再次跳转到FirstActivity,这个时候系统会在原始栈结构中生成一个FirstActivity实例,然后回退两次,注意,并没有退出,而是回到了SecondActivity,为什么呢?是因为从SecondActivity跳转到FirstActivity的时候,我们的起点变成了SecondActivity实例所在的栈结构,这样一来,我们需要“回归”到这个栈结构。
如果我们修改FirstActivity的launchMode值为singleTop、singleTask、singleInstance中的任意一个,流程将会如图所示:
- Activity之生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Android学习笔记之Activity的生命周期和启动模式
- android笔记之activity生命周期和启动模式
- Activity生命周期和和启动模式
- Android之Activity生命周期及启动模式
- Activity的生命周期和启动模式
- ReentrantLock之公平锁与非公平锁浅析
- Oracle控制文件
- MyEclipse报错:Target runtime Apache Tomcat 7.0 is not defined
- Java序列化之自定义序列化2
- 增强你的python见识
- Activity之生命周期和启动模式
- 实例恢复的深入解析
- Apache日志配置远程Syslog采集
- 孙子算经 卷上
- 从Heron看实时计算系统差异对比
- 学习WCF之路2:配置WCF
- 数据库控制文件中的SCN详解
- 面试中常见链表问题4:删除链表中重复元素1
- 快速理解Docker - 容器级虚拟化解决方案