Android开发基础--Activity

    技术2022-07-16  69

    Activity相关知识整理

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

    一、Activity生命周期

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

    二、Activity四种启动模式

    standardsingleTopsingleTasksingleInstance

    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文件中配置

    <activity android:name=".testActivity.testActivity"> <intent-filter> <action android:name="android.intent.action.TESTACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>

    2. 显式启动

    跳转至同一项目下另一Activity

    最常见的启动方式 startActivity(new Intent(MainActivity.this, testActivity.class)); 通过Intent的ComponentName ComponentName cn = new ComponentName(MainActivity.this,testActivity.class) ; Intent intent = new Intent() ; intent.setComponent(cn) ; startActivity(intent) ; 初始化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状态

    Processed: 0.025, SQL: 10