1. Activity生命周期
Activity从onCreate()
开始,到onDestroy()
结束。
首次打开Activity,依次调用
onCraete()
、onStart()
和onResume()
。
选择Home键,依次调用
onPause()
和onStop()
。
再次打开Activity,依次调用
onRestart()
、onStart()
和onResume()
。
按返回键,依次调用
onPause()
、onStop()
和onDestroy()
。
2. Activity保存参数
如果Activity被后台关闭或者手机横竖屏切换时,都会进行参数的保存,而其他变量都将被重置。
在手机横竖屏切换时,依次调用
onPause()
、onSaveInstanceState()
、onStop()
和onDestroy()
来关闭Activity。
接着依次调用
onCreate()
、onStart()
、onRestoreInstanceState()
和onResume()
重新打开Activity。
在onSaveInstanceState()
方法中,调用outState.putXX()
保存数据。在onRestoreInstanceState()
方法中,调用savedInstanceState.getXX()
读取保存数据。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
3. 多Activity生命周期
Activity1打开Activity2
- Activity1调用
onPuase()
方法。 - Activity2依次调用
onCreate()
、onStart()
和onResume()
方法。 - Activity1调用
onStop()
方法。
- Activity1调用
Activity2返回Activity1
- Activity2调用
onPause()
方法。 - Activity1依次调用
onRestart()
、onStart()
和onResume()
方法。 - Activity2才调用
onStop()
和onDestroy()
方法。
- Activity2调用
4. Activity启动模式
Activity一共有以下四种launchMode,可在AndroidManifest.xml中配置,默认值为“standard”。
android:launchMode=”standard|singleTop|singleTask|singleInstance”
standard,每次都会创建一个新的Activity,并且在Task的顶部。
singleTop,如果Activity在Task的顶部,依次调用该Activity的
onPause()
、onNewIntent()
和onResume()
方法。否则创建一个新的Activity。
singleTask,如果Activity在Task中,在上面的Activity都会被销毁,依次调用
onNewIntent()
、onRestart()
、onStart()
和onResume()
方法。否则创建一个新的Activity。
如果Activity在Task的顶部,调用onPause()
、onNewIntent()
和onResume()
方法,类似于singleTop。
- singleInstance,每次请求都会在新的Task中打开Activity,如果Activity已经创建,直接使用。否则就创建新的Activity。调用方法类同于singleTask但不会销毁原有Task中Activity。
注意点:
- standard和不在顶部的singleTop都会创建一个新的实例,而在顶部的singleTop、singleTask和singleInstance不会创建新的实例。
- stardard、singleTop和singleTask会在一个Task中,而singleInstance在不同的Task中。按Home键后重新打开App,singleInstance所在Task会消失。
5. Intent Flag
打开Activity时,可以通过在Intent中包含标志来修改Activity与当前Task的关联。
几种常用的标志:
- FLAG_ ACTIVITY_ NEW_ TASK,在一个新的Task中开启一个Activity。
- FLAG_ ACTIVITY_ SINGLE_ TOP,如果打开的Activity在Task的顶部,调用该Activity的
onPause()
、onNewIntent()
和onResume()
方法。 - FLAG_ ACTIVITY_ CLEAR_ TOP,如果打开的Activity在Task中已经运行,该Activity上面的所有Activity都会被销毁(包括该Activity),然后打开新的Activity。
注意点:
- 在Standard模式下,FLAG_ ACTIVITY_ NEW_ TASK和FLAG_ ACTIVITY_ CLEAR_ TOP都会创建一个新的Activity。
- 使用FLAG_ ACTIVITY_ SINGLE_ TOP|FLAG_ ACTIVITY_ CLEAR_ TOP的方式可以不用创建新的Activity,依次调用
onNewIntent()
、onRestart()
、onStart()
和onResume()
方法。