Android Activity的四种启动模式、onNewIntent()方法、四个状态

导读

  • 移动开发知识体系总章(Java基础、Android、Flutter)
  • Activity的四种启动模式
  • onNewIntent()方法何时会被调用
  • Activity的四个状态

Activity的四种启动模式

standard,singleTop,singleTask,singleInstance

  • standard:默认模式,每次激活的Activity都会创建实例放到任务栈中
  • singleTop:如果任务栈顶正好存在该Activity的实例,就重用该实例,反之只要不在栈顶,无论是否有该实例额,都会创建新的实例。
  • singleTask:如果任务栈中有该Activity的实例,那么会把该实例之上的实例都移除出栈,让该实例作为栈顶。如果没有该Activity实例则创建并放到栈顶
  • singleInstance:这是一个特殊的模式,会在一个新的栈创建Activity实例,并让多个应用共享该栈中的Activity实例,只要有一个应用激活了该Activity的实例,其他用到该Activity实例的都不需要再进行激活(创建)

四种启动模式在什么时候使用?

  • standard:默认模式,大部分使用的是该模式。
  • singleTop:
    • 适合接收通知启动的内容显示页面。
    • 适合自己跳自己的页面。
    • 适合多入口启动的页面。
  • singleTask:适合程序主Activity(或者是主模块Activity)(ps:可能有面试被问到过开100个activity如何快速关闭,除了在主Activity使用singleTask模式外,大部分使用的是Activity管理吧,后期补充这一块。)
  • singleInstance: 适合独立任务、多APP使用的页面、以及系统级功能(闹钟、打电话等)

onNewIntent()方法何时会被调用

当Activity的launchMode为singleTask的时候,通过Intent启动一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法。这时的Activity执行的生命周期为:onNewIntent()——>onRestart()——>onStart()——>onResume();

当然也不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法.

Activity的四个状态

  • running : 用户可见状态,即当前Activity实例在栈顶。
  • paused : 仍然是用户可见状态,但是界面失去焦点无法与用户交互。
  • stopped :用户不可见状态,无法交互。
  • destroyed/killed :当前Activity实例被销毁,等待系统回收。
Android Activity的四种启动模式、onNewIntent()方法、四个状态_第1张图片
image

Starting ——–>Running 所执行的生命周期顺序 onCreate()->onstart()->onResume()

当前称为活动状态(Running),此activity所处于任务栈的top中,可以与用户进行交互。

Running ——>Paused 所执行Activity生命周期中的onPause()

当前称为暂停状态(Paused),该Activity已失去了焦点但仍然是可见的状态(包括部分可见)。

Paused ——>Running所执行的生命周期为:OnResume()

当前重新回到活动状态(Running),此情况用户操作home键,然后重新回到当前activity界面发生。

Paused ——>Stoped所执行的生命周期为:onStop()

该Activity被另一个Activity完全覆盖的状态,该Activity变得不可见,所以系统经常会由于内存不足而将该Activity强行结束。

Stoped——>killed所执行的生命周期为:onDestroy()

该Activity被系统销毁。当一个Activity处于暂停状态或停止状态时就随处可能进入死亡状态,因为系统可能因内存不足而强行结束该Activity。

你可能感兴趣的:(Android Activity的四种启动模式、onNewIntent()方法、四个状态)