1. Activity 的生命周期相关问题:
Activity 的生命周期介绍?各种操作下,相对应执行了哪些对应的方法?
经过一个星期对android的具体学习,有了一定了解,有必要对所理解的做一个总结,对今后进一步的掌握android也是种积淀和积累。
Android中, Component(Activity,service和broadcast recervices)的生命周期始于其响应一个Intent请求,终于该Component销毁。在这个期间,Component可能处于激活/未激活,可见/不可见的状态.
完全由应用程序管理器控制而不是由系统控制)
一个Activity的全部生命周期由以下方法定义:你可以重写这些方式,当Activity的状态发生改变时可以做一些需要的操作。所有的Activity都是实现OnCreate(Bundle) 来完成一些初始的操作
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
以下两幅图,比较清楚得介绍了,Activity的生命周期
接下来,通过以下一段测试的代码,通过打出的Log来看看我们在各种不同的操作下,Activity到底执行了哪些?以及执行顺序?
package com.myandroid.test;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class AndroidTest extends Activity {
private static final String TAG = "MyNewLog";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e(TAG, "onCreate");
}
public void onStart(){
super.onStart();
Log.e(TAG, "onStart");
}
public void onRestart(){
super.onRestart();
Log.e(TAG, "onRestart");
}
public void onResume(){
super.onResume();
Log.e(TAG, "onResume");
}
public void onPause(){
super.onPause();
Log.e(TAG, "onPause");
}
public void onStop(){
super.onStop();
Log.e(TAG, "onStop");
}
public void onDestroy(){
super.onDestroy();
Log.e(TAG, "onDestroy");
}
}
1..启动该测试Activity时:
打印顺序:onCreate()->onStart()->onResume()
1. 按BACK键:
打印顺序:onPause()->onStop()->onDestroy()
2. 再重新调用该Activity时:
打印顺序: onCreate()->onStart()->onResume()
3. 按HOME键时:
打印顺序: onPause()->onStop() (并没有OnDestroy())
4. 再重新调用该Activity时:
打印顺序:onRestart()->onStart()->onResume()或者
打印顺序:onDestroy()->onCreate()->onStart()->onResume()
activity主要生命周期的方法说明:
onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!
onStart():activity变为在屏幕上对用户可见时调用。
onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!
onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。
onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
onDestroy():activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用Finish()方法或者系统决定停止该活动以释放资源!
PS:在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!
通过重写Activity的onSaveInstanceState事件处理函数,你可以使用它的Bundle参数来保存实例的值, 这个处理函数会在Activity的Active生命周期结束时触发,但仅在它不是显式地结束(即异常结束)。因此,它一般用于确保在单个用户会话中的Active生命周期间Activity状态的一致性