Activity的一些事
2018-06-24 本文已影响0人
懒猫1105
Activity的一些事
1. Activity的生命周期
1、启动MainActivity,按下home键
启动MainActivity
I: MainActivity onCreate:
I: MainActivity onStart:
I: MainActivity onResume:
按下home键
I: MainActivity onPause:
I: MainActivity onStop:
2、 启动MainActivity,再启动SecondActivity,再按下back键
启动MainActivity
I: MainActivity onCreate:
I: MainActivity onStart:
I: MainActivity onResume:
启动SecondActivity
I: MainActivity onPause:
I: MainActivity onStop:
I: SecondActivity onCreate:
I: SecondActivity onStart:
I: SecondActivity onResume:
按下back键
I: SecondActivity onPause:
I: MainActivity onStart:
I: MainActivity onResume:
I: SecondActivity onStop:
I: SecondActivity onDestroy:
3、 启动MainActivity,旋转屏幕,再次旋转屏幕
启动MainActivity
I: MainActivity onCreate:
I: MainActivity onStart:
I: MainActivity onResume:
旋转屏幕(旋转至横屏)
I: MainActivity onPause:
I: MainActivity onSaveInstanceState:
I: MainActivity onStop:
I: MainActivity onDestroy:
I: MainActivity onCreate:
I: MainActivity onStart:
I: MainActivity onRestoreInstanceState:
I: MainActivity onResume:
再次旋转屏幕(旋转至竖屏)
I: MainActivity onPause:
I: MainActivity onSaveInstanceState:
I: MainActivity onStop:
I: MainActivity onDestroy:
I: MainActivity onCreate:
I: MainActivity onStart:
I: MainActivity onRestoreInstanceState:
I: MainActivity onResume:
Activity任务栈
App启动时候创建一个任务栈,activity被保存在栈中进行管理。
Activity启动模式
-
AndroidMainifest.xml配置android:launchMode属性
- standard 默认模式,每次都新建一个Activity加入栈
- singleTop 启动activity时,会先判断任务栈顶部是否等于要启动的activity,如果是则直接引用,不是则创建新的
- 这种方式虽然不会重新创建activity,但是会回调onNetIntent方法
- singleTask 启动activity时,检测栈中是否有要启动的activity,如果有则销毁要启动activity之上的activity,直接使用,没有则新建activity。
- 如果是别的app要启动这个activity,那么这个activity会被放在一个新的任务栈里
- singleInstance 启动activity时候先去后台任务栈看是否有这个activity,如果有直接使用,没有则新建一个任务栈存放。 注意!这个任务栈只存在这个activity
- 注意!如果是singleTop、singleInstance标志的ActivityA使用startActivityForResult()启动ActivityB,那么系统会直接返回Activity.RESULT_CANCELED
-
设置Intent的Flag
- Intent.FLAG_ACTIVITY_NEW_TASK 无论什么情况都新建一个任务栈来启动Activity
- Intent.FLAG_ACTIVITY_SINGLE_TOP 即singleTop模式
- Intent.FLAG_ACTIVITY_CLEAR_TOP 即singleTask模式
- Intent.FLAG_ACTIVITY_NO_HISTORY 配置这个标志位的Activity启动其他Activity时候会被销毁
- 如A用FLAG_ACTIVITY_NO_HISTORY配置启动了B,B启动C,那么任务栈只有AC