Android开发基础--Activity

Activity相关知识整理

  • 一、Activity生命周期
  • 二、Activity四种启动模式
    • 1. standard
    • 2. singleTop
    • 3. singleTask
    • 4. singleInstance
  • 三、Activity启动方式
    • 1. 在AndroidManifest.xml文件中配置
    • 2. 显式启动
    • 3. 隐式启动
  • 四、Activity的四种状态
    • 1. Running
    • 2. Paused
    • 3. Stopped
    • 4. Destroyed
  • 五、异常情况下生命周期
    • 1. 资源相关的系统配置导致Activity被杀死并重新下创建
    • 2. 资源内存不足时导致低优先级的Activity被系统杀死

一、Activity生命周期

Android开发基础--Activity_第1张图片

  1. onCreate()
    创建活动时调用,应该实现初始化Activity的基本组件:例如在此处创建视图并绑定数据到列表。在此处调用 setContentView() 来定义Activity的布局。
  2. onStart()
    onCreate() 完成后,Activity进入“已启动”状态,并且对用户可见时调用。此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。一般在此期间注册广播。
  3. onResume()
    与用户交互前调用,此时该Activity处于Activity堆栈顶部,并会捕获所有用户输入。
  4. onPause()
    Activity失去焦点进入“已暂停”状态时调用,当处于此状态时,Activity仍然部分可见,表明用户正在离开此Activity,如果用户希望界面继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界面。
    关键的持久数据应该在onPause()方法中保存,因为onPause()方法是进程被杀死之前保证会执行的最后一个方法。当然保存的数据必须慎重,不应保存应用或用户数据、进行网络呼叫或执行数据库事务,因为如果方法阻塞,会影响系统响应时间,影响用户体验(说白了重要的数据保存,耗时的事不做)。
  5. onStop()
    当Activity不可见时调用此方法,时机:当前Activity被销毁,新的Activity启动,并且覆盖当前Activity。
    此期间一般可以进行取消注册广播等操作.
  6. onRestart()
    当处于“已停止”状态的Activity被重新启动时,回调此方法。
  7. onDestroy()
    系统会在销毁Activity之前回调此方法,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。

二、Activity四种启动模式

  • standard
  • singleTop
  • singleTask
  • singleInstance

1. standard

默认启动模式,这种启动模式每次都会创建新的实例,新创建的Activity会置于栈顶。

2. singleTop

栈顶复用模式,启动一个具有singleTop启动模式的Activity,系统会判断当前栈顶是不是要启动的Activity,如果是则不会创建新的Activity,会直接复用当前Activity, 同时回调 onNewIntent() 方法。
如果栈顶不是当前Activity,则会重新创建新的Activity,即使当前栈中存在此Activity。

3. singleTask

栈内复用模式,启动一个具有singleTask启动模式的Activity,系统会首先在任务栈中寻找此Activity:如果任务栈中有实例存在,复用这个Activity,并且将位于该Activity上的其他Activity全部销毁;如果不存在,则会创建该Activity,并放入栈中。

4. singleInstance

这种启动模式与singleTask相似,只允许系统中存在一个目标Activity,与singleTask不同的是,启动具有singleInstance启动模式的Activity,需要创建一个新的任务栈来存放它,任务栈中不能再有其他Activity。

三、Activity启动方式

  • 显式启动
  • 隐式启动

1. 在AndroidManifest.xml文件中配置


   	
       	
       	
   	

2. 显式启动

跳转至同一项目下另一Activity

  1. 最常见的启动方式
startActivity(new Intent(MainActivity.this, testActivity.class));
  1. 通过Intent的ComponentName
ComponentName cn = new ComponentName(MainActivity.this,testActivity.class) ;
Intent intent = new Intent() ;
intent.setComponent(cn) ;
startActivity(intent) ;
  1. 初始化Intent时指定Activity
Intent intent = new Intent();
intent.setClass(MainActivity.this, testActivity.class);
startActivity(intent);

3. 隐式启动

不同应用间启动Activity

Intent intent = new Intent();
intent.setAction("android.intent.action.TESTACTIVITY");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);

四、Activity的四种状态

  • Running(运行)
  • Paused(暂停)
  • Stopped(停止)
  • Destroyed(销毁)

1. Running

Activity在系统中处于获得焦点状态,可以与用户进行交互,即当前Activity在活动栈最顶端。
生命周期中触发的函数顺序:onCreate() -> onStart() -> onResume()

2. Paused

Activity失去焦点但仍然处在可见或者部分可见状态,或者设备进入休眠状态,一个住在暂停状态的Activity只有在系统资源极度匮乏的情况下才会被强制结束。
运行状态到暂停状态调用:onPause()
暂停状态恢复运行调用:onResume()
弹出Dialog不会变为该状态,也不会调用生命周期中的方法

3. Stopped

停止状态一般指当前Activity被另一Activity完全覆盖,所以系统会经常因内存不足而将处在Stopped状态的Activity强行结束。
启动另一Activity时调用:onPause() -> onStop()
返回时调用:onRestart() -> onStart() -> onResume()

4. Destroyed

该状态Activity被销毁,(1)用户操作导致(2)内存不足系统强行结束。

五、异常情况下生命周期

  • 资源相关的系统配置发生改变时
  • 资源内存不足时

1. 资源相关的系统配置导致Activity被杀死并重新下创建

当系统配置发生变化时,Activity会被杀死,系统会调用 onPause() -> onStop() -> onDestroy() ,同时会调用 onSavedInstanceState() 方法来保存Activity的状态,这个方法调用在 onStop() 前,与 onPause() 没有既定的时序关系,这个方法只有在Activity被异常终止的时候才会调用,正常情况是不会调用的。当Activity重新创建时,系统会调用 onRestoreInstanceState() 并把Activity销毁时 onSavedInstanceState() 保存的Bundle对象传递给 onRestoreInstanceState() 和 onCreate() 方法。因此我们可以通过这两个方法来判断Activity是否被重建,从时序来说,onCreat应该在 onRestoreInstanceState() 之前执行。

2. 资源内存不足时导致低优先级的Activity被系统杀死

优先级最高:Running状态
优先级中等:Paused状态
优先级最低:Stopped状态

Android开发基础--Activity_第2张图片

你可能感兴趣的:(Android开发基础--Activity)