关于Activity的四种加载模式之生命周期变化(自己记忆)

1,771 阅读2分钟

四种启动模式分别是:

standard(默认),singleTop,singleTask,singleInstance


菜鸟教程相关Activity的四种加载模式

设置启动模式后,关于Activity生命周期变化
  • 创建MainActivity跳转到TwoActivity,再到销毁TwoActivity的两个Activity的生命周期变化(standard(默认))
V/MainActivity:  MainActivity  onCreate  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume 
V/MainActivity:  MainActivity  onPause  
V/TwoActivity:  TwoActivity  onCreate  
V/TwoActivity:  TwoActivity  onStart  
V/TwoActivity:  TwoActivity  onResume  
V/MainActivity:  MainActivity  onStop  
V/TwoActivity:  TwoActivity  onPause  
V/MainActivity:  MainActivity  onRestart  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume
V/TwoActivity:  TwoActivity  onStop  
V/TwoActivity:  TwoActivity  onDestroy  
  • 配置TwoActivity的启动模式为singleInstance,MainActivity启动模式不变(standard)生命周期无变化。
<activity android:name=".MainActivity"
    android:launchMode="standard">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name=".TwoActivity"
    android:launchMode="singleInstance">
</activity>
  • MainActivity和TwoActivity都配置成singleInstance,从界面的变化来看,开启了一个新的Task栈,而且当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例 的onNewIntent()方法,将Intent实例传递到该实例中
findViewById(R.id.btn_two).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //finish();
        //这里是再次启动MainActivity的实例
        Intent intent = new Intent(TwoActivity.this,MainActivity.class);
        startActivity(intent);
    }
});
//生命周期变化 如下:
V/MainActivity:  MainActivity  onCreate  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume  
//跳转到TwoActivity
V/MainActivity:  MainActivity  onPause  
V/TwoActivity:  TwoActivity  onCreate  
V/TwoActivity:  TwoActivity  onStart  
V/TwoActivity:  TwoActivity  onResume  
V/MainActivity:  MainActivity  onStop  
//点击TwoActivity界面的按钮btn_two跳转到MainActivity,界面的传值使用(onNewIntent)
V/TwoActivity:  TwoActivity  onPause  
V/MainActivity:  MainActivity  onNewIntent  
V/MainActivity:  MainActivity  onRestart  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume  
V/TwoActivity:  TwoActivity  onStop  
//然后又跳到TwoActivity
V/MainActivity:  MainActivity  onPause  
V/TwoActivity:  TwoActivity  onNewIntent  
V/TwoActivity:  TwoActivity  onRestart  
V/TwoActivity:  TwoActivity  onStart  
V/TwoActivity:  TwoActivity  onResume  
V/MainActivity:  MainActivity  onStop  
  • TwoActivity的启动模式singleTop,MainActivity的启动模式standard,如果我从MainActivity跳转到TwoActivity时生命周期流程
V/MainActivity:  MainActivity  onCreate  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume  
//开始跳转
V/MainActivity:  MainActivity  onPause  
V/TwoActivity:  TwoActivity  onCreate  
V/TwoActivity:  TwoActivity  onStart  
V/TwoActivity:  TwoActivity  onResume  
V/MainActivity:  MainActivity  onStop  
//点击返回(finish)时运行
V/TwoActivity:  TwoActivity  onPause  
V/MainActivity:  MainActivity  onRestart  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume  
V/TwoActivity:  TwoActivity  onStop  
V/TwoActivity:  TwoActivity  onDestroy  
//再点击跳转到TwoActivity
V/MainActivity:  MainActivity  onPause  
V/TwoActivity:  TwoActivity  onCreate  
V/TwoActivity:  TwoActivity  onStart  
V/TwoActivity:  TwoActivity  onResume 
V/MainActivity:  MainActivity  onStop  
  • TwoActivity的启动模式singleTask,MainActivity的启动模式standard,如果我从MainActivity跳转到TwoActivity时生命周期流程,(singleTask只允许在系统中有一个Activity实例)
V/MainActivity:  MainActivity  onCreate  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume
//开始跳转TwoActivity
V/MainActivity:  MainActivity  onPause  
V/TwoActivity:  TwoActivity  onCreate  
V/TwoActivity:  TwoActivity  onStart  
V/TwoActivity:  TwoActivity  onResume  
V/MainActivity:  MainActivity  onStop  
//点击TwoActivity的btn_two跳转回MainActivity时
V/TwoActivity:  TwoActivity  onPause  
//回再次创建MainActivity
V/MainActivity:  MainActivity  onCreate  
V/MainActivity:  MainActivity  onStart  
V/MainActivity:  MainActivity  onResume
V/TwoActivity:  TwoActivity  onStop 
//再跳转到TwoActivity时
V/MainActivity:  MainActivity  onPause  
V/TwoActivity:  TwoActivity  onNewIntent  
V/TwoActivity:  TwoActivity  onRestart  
V/TwoActivity:  TwoActivity  onStart  
V/TwoActivity:  TwoActivity  onResume  
//而且MainActivity销毁了
V/MainActivity:  MainActivity  onStop  
V/MainActivity:  MainActivity  onDestroy