Activity总结

Activity生命周期

Activity总结_第1张图片
Activity生命周期图示

BACK键:

当我们按Back键时,我们这个应用程序将结束,这时候将先后调用onPause()->onStop()->onDestory()三个方法。
再次启动App时,会执行onCreate()->onStart()->onResume()

HOME键:

当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,
这时候应用程序并没有销毁。而当我们从桌面再次启动应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法
注意:当Activity在后台时候,如果系统内存不够用,后台的Activity很有可能会被强制销毁回收内存的,那么一定会触发onSaveInstanceState(Bundle outState) 方法,我们可以把想保存的数据保存在 outState对象里,等Activity被重新创建执行onCreate(Bundle saveInstanceState) 从参数saveInstanceState再读取保存的数据

ActivityA 打开 ActivityB

Activity总结_第2张图片
Paste_Image.png

根据上图 可以看出,正常情况下依次是

  • A:onPause()
  • B:onCreate()
  • B:onStart()
  • B:onResume()
  • A:onStop()

但是,如果ActivityB的样式是Dialog样式,B没有完全遮挡A,ActivityB的生命周期跟刚才一样,但是ActivityA并没有执行onStop()

从ActivityB 返回 ActivityA

接着上面的,如果在处于ActivityB 界面按下back键,返回 ActivityA,生命周期如下:

Activity总结_第3张图片
Paste_Image.png

依次会执行:

  • B:onPause()
  • A:onRestart()
  • A:onStart()
  • A:onResume()
  • B:onStop()
  • B:onDestory()

Activity启动模式

  1. Standard模式(默认)
    每次开启,都会在任务栈中创建新的Activity实例
  2. SingleTop模式
    如果当前待开启的Activity正好位于栈顶,就复用,否则在任务栈中创建新的Activity实例
  3. SingleTask模式
    如果当前待开启的Activity已经存在,无论在栈中任何位置,都会将此位置上面的Activity全部移除,然后复用该Activity
  4. SingleInstance模式
    一个任务栈中只有一个Activity,并保证不再有其他

onNewIntent

当Activity不是Standard模式,并且被复用的时候,会触发onNewIntent(Intent intent) 这个方法,一般用来获取新的Intent传递的数据

我们一般会把MainAcitivy设置为SingleTask,除了保证MainActivity的唯一,还可以利用singleTask的特性做一些清理工作。自动管理栈,销毁无用的Acitivity.

Intent Flags

记住一点:Activity都是运行在任务栈里面,但如果要从广播接受者BordercastReceiver或者服务Service去启动一个Activity,必须为当前Activity创建一个新的任务栈才能正常显示

public class MyReceiver extends BroadcastReceiver{
   public void onReceive(Context context, Intent intent) {
      Intent intent=new Intent(context,DemoActivity.class);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//创建新的任务栈
      context.startActivity(intent);
 }

你可能感兴趣的:(Activity总结)