Activity的一些事

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启动模式
  1. 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
  2. 设置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

你可能感兴趣的:(Activity的一些事)