Activity的生命周期

原文链接:https://my.oschina.net/u/2385466/blog/547049

活动的生存期
Activity 类中定义了七个回调方法,覆盖了活动生命周期的每一个环节,下面我来一一
介绍下这七个方法。
1. onCreate()
这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动
第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布
局、绑定事件等。
2. onStart()
这个方法在活动由不可见变为可见的时候调用。
3. onResume()
这个方法在活动准备好和用户进行交互的时候调用。 此时的活动一定位于返回栈的
栈顶,并且处于运行状态。
4. onPause()
这个方法在系统准备去启动或者恢复另一个活动的时候调用。 我们通常会在这个方
法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度
一定要快,不然会影响到新的栈顶活动的使用。
5. onStop()
这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如
果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()
方法并不会执行。
6. onDestroy()
这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
7. onRestart()
这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
Activity的生命周期
以上七个方法中除了 onRestart()方法,其他都是两两相对的,从而又可以将活动分为三
种生存期。
以上七个方法中除了 onRestart()方法,其他都是两两相对的,从而又可以将活动分为三
种生存期。
1. 完整生存期
活动在 onCreate()方法和 onDestroy()方法之间所经历的,就是完整生存期。一般情
况下,一个活动会在 onCreate()方法中完成各种初始化操作,而在 onDestroy()方法中完
成释放内存的操作。
2. 可见生存期
活动在 on
Start()方法和 onStop()方法之间所经历的,就是可见生存期。在可见生存
期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两
个方法,合理地管理那些对用户可见的资源。比如在 onStart()方法中对资源进行加载,
而在 onStop()方法中对资源进行释放, 从而保证处于停止状态的活动不会占用过多内存。
3. 前台生存期
活动在 onResume()方法和 onPause()方法之间所经历的,就是前台生存期。在前台
生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行相互的,我们平时
看到和接触最多的也这个状态下的活动。

requestWindowFeature(Window.FEATURE_NO_TITLE);
//更改窗口样式
onSaveInstanceState()方法会携带一个 Bundle 类型的参数,Bundle 提供了一系列的方法
用于保存数据,比如可以使用 putString()方法保存字符串,使用 putInt()方法保存整型数据,
以此类推。每个保存方法需要传入两个参数,第一个参数是键,用于后面从 Bundle 中取值,
第二个参数是真正要保存的内容。
在 MainActivity中添加如下代码就可以将临时数据进行保存:

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String tempData = "Something you just typed";
outState.putString("data_key", tempData);
}

数据是已经保存下来了,那么我们应该在哪里进行恢复呢?细心的你也许早就发现,我
们一直使用的 onCreate()方法其实也有一个 Bundle类型的参数。这个参数在一般情况下都是
null,但是当活动被系统回收之前有通过 onSaveInstanceState()方法来保存数据的话,这个参
数就会带有之前所保存的全部数据,我们只需要再通过相应的取值方法将数据取出即可。
修改 MainActivity的 onCreate()方法,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
String tempData = savedInstanceState.getString("data_key");
Log.d(TAG, tempData);
}
……
}

转载于:https://my.oschina.net/u/2385466/blog/547049

上一篇:OSGi无头运行在Linux上-org.eclipse.core.runtime无法获取应用程序服务


下一篇:Convert Windows 32bit dirver to Windows 64bit