Activity 设置 launchMode:
standard
Activity 默认的启动模式,这种模式下,每次 startActivity 都会在栈顶创建一个新的实例,在同一个任务中可以存在多个Activity 的实例。
singleTop
栈顶复用,也就是说,要启动 singleTop 模式的 Activity,如果它恰好在当前栈顶,那么直接复用,并且会首先调用这个实例的 onNewIntent()方法。否则,就重新创建一个实例入栈。
singleTask
在系统中只有一个实例,当再次启动该 Activity 时,会重用已存在的任务和实例,并且会首先调用这个实例的 onNewIntent()方法,finish()实例之上所有的activity。
补充一个通过singleTask式退出App的方法:
1.MainActivity设置为SingleTask
android:launchMode="singleTask"
2.重写MainActivity中的onNewIntent方法
private static final String TAG_EXIT = "exit_Application";
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent != null) {
boolean isExit = intent.getBooleanExtra(TAG_EXIT, false);
if (isExit) {
this.finish();
}
}
3.需要退出时在Intent中添加退出的TAG
Intent intent = new Intent(this,MainActivity.class);
intent.putExtra(MainActivity.TAG_EXIT, true);
startActivity(intent);
singleInstance
单一实例模式:整个手机系统中只有该Activity的一个实例。并且该实例单独存在一个activity栈中。
activity的七大生命周期
来自Google官网的截图
![](https://img.haomeiwen.com/i13690186/8ff7ad57e9e49b46.png)
1.onCreate(): 当Activity第一次被创建时调用,完成活动的初始化操作。
2.onStart(): 当用户可以看到这个Activity时调用
3.onResume() : 当获得了用户的焦点时
4.onPause() : 当系统准备启动或回复另一个活动时调用。在这个方法中将一些小号CPU的资源释放,保存一些重要数据。
5.onStop() : 当活动完全不可见是调用,当新启动的活动时对话框式的,还处于可见时,该方法是不会被调用
6.onDestroy():活动被销毁时调用
7.onRestart():当活动有停止状态变为运行状态时调用。
onCreate()-->onDestroy()是整个生命周期,onDestroy()释放所有资源。
onStart()-->onStop()是可见的生命周期,这两个方法可以被多次调用。
onResume()-->onPause()是前台的生命周期,也可以被多次调用,处于所有 Activity的最上面,获得焦点。
总结:
1.Activity第一次启动:onCreate()-->onStart()-->onResume();
2.Activity被弹框获取焦点,再重新获取焦点:onResume()-->onPause();
3.Activity停止运行(被其他Activity遮住了,在后台未被销毁):onPause()-->onStop();
4.停止运行后重新运行:onRestart()-->onStart()-->onResume();
5.运行是被销毁:onPause()-->onStop()-->onDestroy();
6.singleTop(恰好在当前栈顶)和singleTask (再次启动):onNewIntent()-->onRestart()-->onStart()-->onResume(),每次执行onNewIntent之前,一定有经历过onPause();
网友评论