您的位置:首页 > 其它

Activity生命周期和启动模式

2016-04-21 16:43 197 查看
activity和用户之间的关系最密切,在学习android的过程中,刚开始并不晓得生命周期的意义和用途,随着学习的深入,和自己做APP的体会,深刻理解activity的生命周期对我们编写android程序很重要。所以有必要总结提炼以加深印象和理解。

activity:
onCreate();
进行全局初始化,
onStart();
用户可见但是并不能交互
onResume();
和用户交互
onPause();
此activity需暂停,不可交互。一般在这个方法里,我们用于保留未保存的修改,
停止可能会消耗处理器资源的动画等。如果之后此activity重新和用户交互,
而且并没有被系统收回,就会调用onResume()方法。
onStop();
activity已经不可见,被其他的activity覆盖了。
如果覆盖此activity的activity推出了,那么此activity重新展示,
就会调用activity的onRestart()方法,
然后再调用onStart()方法进入前台,
再调用onResume()方法与用户交互。
onDestory();
此activity已经被销毁。
有可能是代码中调用了finish()方法将此销毁,
也有可能是系统资源不足,将其所占资源收回了。


在后台运行的activity很有可能被系统收回,那在activity中的状态该如何办呢?在android编程中我们会经常用到intent中放入数据进行跨activity传递,其中的Bundle类型,大家应该很清楚,而在activity的onCreate()方法中也有一个Bundle类型的参数savedInstanceState,那这个参数是怎么来的呢?就是因为activity在后台运行的时候很可能被系统收回,所以系统提供的给我们保存数据的机会,在activity容易被销毁时,也就是在后台时系统就会调用onSaveInstanceState()方法来保存状态。

onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

介绍一下onSaveInstanceState(Bundle outState) 方法

outState 参数作用 :
1、 数据保存 : Activity 声明周期结束的时候,
需要保存 Activity 状态的时候,
会将要保存的数据使用*键值对*的形式 保存在 Bundle对象中;
2、 恢复数据 : 在 Activity 的 onCreate()方法
创建 Activity 的时候会传入一个 Bundle对象,
这个 Bundle 对象就是这个 outState 参数;
调用时机 : Activity **容易**被销毁的时候调用
_activity失去焦点进入后台。
1、 按下Home键 : Activity 进入了后台, 此时会调用该方法;
2、 按下电源键 : 屏幕关闭, Activity 进入后台;
3、 启动其它 Activity : Activity 被压入了任务栈的栈底;
4、 横竖屏切换 : 会销毁当前 Activity 并重新创建;
onSaveInstanceState方法调用注意事项 :
用户主动销毁不会调用 :
当用户点击回退键 或者 调用了 finish() 方法, 不会调用该方法;
调用时机不固定 :
该方法一定是在 onStop() 方法之前调用,
但是不确定是在 onPause() 方法之前 还是 之后调用;
布局中组件状态存储 :
每个组件都 实现了 onSaveInstance() 方法,
在调用函数的时候, 会自动保存组件的状态,**只有有 id 的组件才会保存**;
关于默认的 super.onSaveInstanceState(outState) :
该默认的方法是实现 组件状态保存的;


在后台的activity被系统杀死之后,我们再次使用这个activity时,就会重新创建这个activity,就会调用onCreate()方法或者是onRestoreInstanceState()方法。

介绍一下   onRestoreInstanceState(Bundle savedInstanceState) 方法

方法回调时机 :
在 Activity 被系统销毁之后 **恢复 Activity 时被调用**。
Bundle 对象传递 :
该方法保存的 Bundle 对象在 Activity 恢复的时候
也会通过参数传递到 onCreate() 方法中;
位于生命周期的位置:
该方法在 onResume() 方法之前保存信息;


调用onRestoreInstanceState()方法,在onStart之后恢复状态,其实可以不用,因为之前就用onCreate()方法获取保存的参数进行状态恢复了。

activity的启动模式 :

Task 和 BackStack (任务栈)

1、standard

每次启动activity都会在任务栈中新建一个activity,按back键返回时,会逐一退出。

2、singleTop

此activity在栈顶的时候,再启动自己时,不会新建,会调用onNewIntent()方法。

3、singleTask

在任务栈中只存在一个activity,任何启动自己都是调用onNewIntent()方法。

4、singleInstance

此activity会创建自己的任务栈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: