在Android学习中,我们肯定离不开Activity,下面我说一些关于我在Activity学习中的一些事项把!
1、Activity的生命周期
首先是Activity的生命周期,由下面这张图说明:
从图片中我们可以看出Activity的生命周期,首先我们重写一下这些方法,并且在下面我用Log日志打印了一下:
public static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate: ");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart: ");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: ");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause: ");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy: ");
}
1、启动Activity的时候,可以看出打印了3个方法,即Activity完成了创建、启动和运行。
2、然后直接进入到主界面或者是切换到另一个应用获得焦点,例如电话打进来,让该应用在后台中继续运行,执行了暂停和停止方法。
3、当我们再次启动Activity时,执行了重启、启动、执行方法,跳过了创建的方法。由此可知,当Activity没有被销毁时,不会从新创建新的Activity。
4、我们销毁Activity,看到依次执行了暂停、停止、销毁方法。
5、当我们重新启动Activity时,会看到这次又执行了创建方法。
2、Activity的启动模式
Activity一共有四种启动模式,分别是:
- standard:标准启动模式,每一次启动该Activity的时候,都会创建一个新的Activity实例,并放入到任务栈中。
- singleTop:只有该任务栈中存在这个Activity实例时,并且该Activity恰巧处于该任务栈的栈顶时,才会调用该Activity实例,否则创建一个新的实例。如果该Activity实例不是处于栈顶,即使任务栈中存在该Activity的实例,也不会被调用,而是重新创建一个新的Activity实例。
- singleTask:一个任务栈中只能存在一个该Activity的实例,如果任务栈中存在Activity的实例,系统会将其调用到栈顶,如果不存在则创建一个新的实例
- singleInstance 在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
3、 onCreate中的savedInstanceState
在我们每次创建一个新的Activity时,首先都会重写一个onCreate方法,那么,其中的参数(Bundle stavedInstanceState)的作用是什么?今天我们进行解答。
当Activity被销毁时,我们有时候需要保存当时的状态,这就是savedInstanceState的作用。一般情况下,在Activity的状态处于暂停时,会调用onSaveInstanceState方法,在其中间使用savedInstanceState保存数据,这样在Activity重新启动时,我们可以根据判断onCreate方法中的参数savedInstanceState是否为空,来确认是否要获取数据。例如:Android游戏开发判断状态、阅读小说时判断阅读的状态。我们都知道Bundle存储数据时和Map集合类似,采用key-value键值对的方式存储。具体代码就不写了,看懂就应该能能够写出来了。