android生命周期研究
核心代码如下:
Intent intent = new Intent(ActivityLifeActivity.this, ActivityLifeActivitySec.class);startActivity(intent);ActivityLifeActivity.this.finish();
ActivityLifeActivity中:
@Overrideprotected void onResume() {Log.i(TAG, "=========onResume=========");super.onResume();}@Overrideprotected void onStart() {Log.i(TAG, "=========onStart=========");super.onStart();}@Overrideprotected void onStop() {Log.i(TAG, "=========onStop=========");super.onStop();}@Overrideprotected void onDestroy() {Log.i(TAG, "=========onDestroy=========");super.onDestroy();}@Overrideprotected void onPause() {Log.i(TAG, "=========onPause=========");super.onPause();}@Overridepublic void finish() {Log.i(TAG, "=========finish=========");super.finish();}
ActivityLifeActivitySec:
@Override
protected void onResume() {Log.i(TAG, "=========onResume_sec=========");super.onResume();}@Overrideprotected void onStart() {Log.i(TAG, "=========onStart_sec=========");super.onStart();}@Overrideprotected void onStop() {Log.i(TAG, "=========onStop_sec=========");super.onStop();}@Overrideprotected void onDestroy() {Log.i(TAG, "=========onDestroy_sec=========");super.onDestroy();}@Overrideprotected void onPause() {Log.i(TAG, "=========onPause_sec=========");super.onPause();}@Overridepublic void finish() {Log.i(TAG, "=========finish_sec=========");super.finish();}
最后结果:
由结果图:
第一个activity在finish()时候没有马上调用onStop()跟onDestory()方法,而是先创建第二activity,等第二个activity创建成功后才销毁先前的activity
当没调用finish()方法的时候他只会调用onStop()方法,没有执行destory()方法
Savingactivity state(保存活动状态)
简单的说,当一个activity 被暂停或者被停止的时候,那么这个activity的状态就被保留了。
这是因为 activity对象仍然被保留在内存中。
这里要注意的是,如果系统为了回收内存而destroy一个 activity的话,activity对象的信息将不会被保留。因此,应该保证这个activity在系统重新创建它之前,可以回调一个方法来保存重要信息。
这个回调方法(callback method)是 onSaveInstanceState().
过程是:
系统在这个activity被destroy之前调用onSaveInstanceState() 并且把这个activity传给Bundle对象。Bundle是用来保存状态信息的地方,使用的方法是名 值对应,如putSting()。
如果系统杀死了这个activity的进程并且用户又回来浏览这个activity,系统就将Bundle传给onCreate(),这样你可以重新存储这个activity的状态。
如果没有状态信息保存,那个Bundle就传null给onCreate().
注意:
onSaveInstanceState()是在activity被destroy之前被调用;
onSaveInstanceState()是在onStop()之前被调用;
onSaveInstanceState()也可能在onPause()之前被调用;
即使你不实现onSaveInstanceState()方法,activity也会默认实现它。而且,每个view都会将onSaveInstanceState()方法作为默认实现。几乎说有的widget也都实现这个方法。
例如,CheckBox 保存它是否被勾选的状态。
我们要做的就是提供出widget的唯一标识ID(通过android:id属性),如果widget没有ID,那么它的状态也不能被保存。
注意:
因为无法保证onSaveInstanceState()方法一定会被调用,
不要使用onSaveInstanceState()保存永久数据;
永久数据保存应该放到onPause()中进行。
按钮事件对activity生命周期的影响
(1)按home键盘:
onPause----> onStop
activity进入不可见状态
进入主键盘重新启动应用,执行onStart---->onResume
假如,activity是singletask类型的,则调用的方法为: onNewIntent()--->onStart()---> onResume()
(2) 按back键
内部调用的方法是:
onBackPressed(),实质就是执行finish()方法
finish ----> onPause ---> onstop ----> onDestory
更多相关文章
- Android WebView 使用方法,可以解决web视频播放层级问题。
- Android 实现分享功能的方法 分类: Android ...
- android 堆栈调试方法
- android WIFi 连接状态之DetailedState
- android获取短信方法1
- android分页查询获取系统联系人信息
- Android的系统通知栏小例子
- android 电池状态获取
- Android获取系统中的其他应用信息