Activity

本文内容

  1. 创建 Activity
    1. 心想事成用户界面
    2. 于清单文件被宣示 Activity
  2. 启动 Activity
    1. 启航 Activity 以博结果
  3. 结束 Activity
  4. 管住 Activity 生命周期
    1. 贯彻生命周期回调
    2. 保存 Activity 状态
    3. 拍卖配置变更
    4. 协调 Activity

Activity 是一个使组件,用户可和那个提供的屏幕进行互动,以实施回打电话、拍摄照片、发送电子邮件或查看地图等操作。
每个 Activity
都见面获一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并转移在旁窗口之上。

一个应用一般由多只相互松散联系的 Activity 组成。 一般会指定应用中之某
Activity 为“主”Activity,即首潮启动以时表现为用户之充分 Activity。
而且每个 Activity 均只是开行另一个 Activity,以便执行不同之操作。 每次新
Activity 启动时,前一 Activity
便会告一段落,但系统会以库房(“返回仓库”)中保存该 Activity。 当新 Activity
启动时,系统会将那推送至回栈上,并取得用户焦点。
返回栈遵循基本的“后进先出”堆栈机制,因此,当用户就时 Activity
并循“返回”按钮时,系统会自仓库中以其弹来(并销毁),然后还原前一
Activity。 (职责以及返回栈文档中对回仓库有更详实的论述。)

当一个 Activity 因某个新 Activity 启动而止住时,系统会通过该 Activity
的生命周期回调方法通知该就同样状态变化。Activity 因状态变化—系统是创建
Activity、停止 Activity、恢复 Activity 还是销毁 Activity—
而收的回调方法恐怕出几种,每一样种植回调都见面呢您提供执行及拖欠状态变化相应的一定操作的会。
例如,停止时,您的 Activity 应放其他大型对象,例如网络或者数据库连接。
当 Activity 恢复时,您可以更取得所待资源,并恢复执行中断的操作。
这些状态转变还是 Activity 生命周期的等同片段。

正文的其余部分阐述有关如何创建和动 Activity 的基础知识(包括针对
Activity 生命周期工作措施的完善阐释),以便你是管理各种 Activity
状态中的生成。

创建 Activity


假定创
Activity,您要创造 Activity 的子类(或应用该现有子类)。您需在子类中落实
Activity 在那个生命周期的各种状态之间转变时(例如创建 Activity、停止
Activity、恢复 Activity 或销毁 Activity 时)系统调用的回调方法。
两独极度着重之回调方法是:

onCreate()
若要贯彻这个方法。系统会以创造而的 Activity
时调用此措施。您当以实现内初始化 Activity 的必需组件。
最要之凡,您得以斯方法外调用setContentView(),以定义 Activity
用户界面的布局。

onPause()
系以之方式作为用户距离 Activity 的率先个信号(但连无总是意味着
Activity 会被灭绝)进行调用。
您便应在此办法外肯定在现阶段用户会话结束后还是有效之其它变动(因为用户可能无见面回到)。

汝还应利用几栽其它生命周期回调方法,以便提供流畅的 Activity
间用户体验,以及处理导致你的 Activity 停止甚至于销毁之竟中断。
后文的管住 Activity
生命周期有些对拥有生命周期回调方法进行了阐释。

落实用户界面

Activity 的用户界面是由于层级式视图 — 衍生自 View 类的靶子 —
提供的。每个视图都决定 Activity
窗口内的一定矩形空间,可针对用户交互作出响应。
例如,视图可以是在用户触摸时起步某项操作的按钮。

卿可以应用 Android
提供的不在少数备视图设计和集体而的布局。“小部件”是提供按钮、文本字段、复选框或只有是一样帧图像等屏幕视觉(交互式)元素的视图。
“布局”是衍生自 ViewGroup 的视图,为其子视图提供唯一布局模型,例如线性布局、网格布局要相对布局。
您还好为 View 类和 ViewGroup 类创建子类(或采用该存世子类)来机关创建小部件与布局,然后以她以为公的
Activity 布局。

运视图定义布局之太普遍方法是依赖保存在你的采取资源内之 XML
布局文件。这样一来,您便可以拿用户界面的计划性和概念 Activity
行为的源代码分开维护。 您可以经 setContentView() 将布局设置也
Activity 的 UI,从而传递布局之资源 ID。不过,您吗堪当 Activity
代码中创造新 View,并由此将新 View 插入 ViewGroup 来创建视图层次,然后经将根 ViewGroup 传递到 setContentView() 来使用该布局。

如若要询问关于创建用户界面的音信,请参考用户界面文档。

以清单文件被声称 Activity

公得在清单文件被声称您的 Activity,这样系统才会看它。 要声明您的
Activity,请打开你的清单文件,并拿 <activity> 元素添加为 <application>素的子项。例如:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

公还得以斯因素被在几独其他特色,以定义 Activity 标签、Activity
图标或风格主题等用于安装 Activity UI
风格的习性。 android:name 属性是绝无仅有必需的习性—它指定
Activity
的类名。应用一旦发布,即未承诺改变此类名,否则,可能会见坏诸如应用快捷方式等片段效(请看博客文章 Things
That Cannot
Change [非克改变的情节])。

请参阅 <activity> 元素参考文档,了解关于以清单文件中宣称
Activity 的详细信息。

使用 Intent 过滤器

<activity> 元素还可指定各种
Intent
过滤器—使用 <intent-filter> 元素—以宣称其他使用组件激活它的措施。

当你运 Android SDK 工具创建新利用时,系统自动吗汝创建的票根 Activity
包含一个 Intent 过滤器,其中声明了该 Activity
响应“主”操作都应放开“launcher”类别内。 Intent 过滤器的始末如下所示:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<action> 元素指定这是以之“主”入口点。<category> 元素指定此
Activity 应列入系统的以启动器内(以便用户启动该 Activity)。

若是您打算让使用成独立行使,不同意其他应用激活其
Activity,则您不需另其他 Intent 过滤器。 正如前例所示,只当一个
Activity 具有“主”操作以及“launcher”类别。 您不思量提供于任何以的 Activity
不应有其他 Intent 过滤器,您可使用显式 Intent
自行启动它们(下文对这个做了阐述)。

唯独,如果你想给 Activity 对衍生从其他应用(以及你的打出采取)的隐式
Intent 作出响应,则必须也 Activity 定义其他 Intent 过滤器。
对于你想使作出响应的各个一个 Intent
类型,您还要在相应的 <intent-filter>,其中包一个 <action> 元素,还可选择性地连一个 <category> 元素和/或一个<data> 元素。这些元素指定您的
Activity 可以响应的 Intent 类型。

苟要询问有关而的 Activity 如何响应 Intent 的详细信息,请参见 Intent 和
Intent
过滤器文档。

启动 Activity


卿得透过调用 startActivity(),并拿那传递让描述而想启动的 Activity
的 Intent 来启动另一个 Activity。Intent 对象见面指定您想启动之有血有肉
Activity 或描述而想实行的操作类型(系统会为你选择相当的
Activity,甚至是来其他使用的 Activity)。 Intent
对象还可能携带少量供所启动 Activity 使用的数额。

以你的起来以内工作经常,您不时只有需要启动某个已知 Activity。
您可经过应用类名创建一个显式定义您想启动之 Activity 的 Intent
对象来贯彻此目的。 例如,可以由此以下代码让一个 Activity
启动另一个名也 SignInActivity 的 Activity:

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

可是,您的使用或还用动用公的 Activity
数据实施某项操作,例如发送电子邮件、短信或者状态更新。
在这种状态下,您的使自身或者不享行此类操作所欲的
Activity,因此你得变动吧利用设备上另外以提供的 Activity
为而执行这些操作。 这便是 Intent 对象的确实价值所在 — 您可创建一个
Intent 对象,对而想实行的操作进行描述,系统会打旁使用启动相应的
Activity。 如果出差不多个 Activity 可以拍卖
Intent,则用户可以选择而采取啊一个。
例如,如果您想同意用户发送电子邮件,可以创建以下 Intent:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);

添加到 Intent 中的 EXTRA_EMAIL extra
是一个字符串数组,其中蕴涵应将电子邮件发送到之电子邮件地址。
当电子邮件采取响应这 Intent 时,它见面读取 extra
中提供的字符串数组,并以它放入电子邮件撰写窗体的“收件人”字段。
在这种情况下,电子邮件采取之 Activity 启动,并且当用户就操作时,您的
Activity 会恢复执行。

开行 Activity 以得结果

突发性,您或许用由启动之 Activity
获得结果。在这种情形下,请通过调用 startActivityForResult()(而非 startActivity())来启动
Activity。 要惦记在继接受后续 Activity
的结果,请实现 onActivityResult() 回调方法。 当后续 Activity
完成时,它会下 Intent 向您的 onActivityResult() 方法返回结果。

比如说,您可能要用户挑选其中同样各项联系人,以便你的 Activity
对拖欠联系人受的消息实行某项操作。 您得由此以下代码创建此类 Intent
并处理结果:

private void pickContact() {
    // Create an intent to "pick" a contact, as defined by the content provider URI
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }
}

上例显示的是,您于拍卖 Activity
结果时应有在 onActivityResult() 方法中行使的着力逻辑。
第一独标准化检查请求是否中标(如果成功,则resultCode将为 RESULT_OK)以及这结果应的要是否都知道

在斯状况下,requestCode与随 startActivityForResult() 发送的老二单参数匹配。
代码通过查询Intent 中回到的数量(data 参数)从该处开始拍卖 Activity
结果。

实质上情况是,ContentResolver 对一个内容提供程序执行查询,后者返回一个 Cursor,让查询的数据能为读取。如用询问详细信息,请参考情提供次文档。

假设用了解有关 Intent 用法的详细信息,请参见 Intent 和 Intent
过滤器文档。

结束 Activity


你可以由此调用 Activity 的 finish() 方法来了该
Activity。您还可通过调用 finishActivity() 结束你事先启动之别样一个
Activity。

:在大部分气象下,您不承诺采用这些点子显式结束 Activity。
正如下文有关 Activity 生命周期的一对所陈述,Android 系统会为你管理
Activity 的生命周期,因此若无需终止自己的 Activity。
调用这些方法或者对预期的用户体验发生不良影响,因此只承诺以公确实不思量叫用户返回此
Activity 实例时采用。

管住 Activity 生命周期


通过落实回调方法管理 Activity
的生命周期对出强大而同时利落的行使主要。 Activity
的生命周期会直接着 Activity 与其余
Activity、其职责与返回栈的关联性的影响。

Activity 基本上以三种植状态是:

继续
此 Activity 位于屏幕前台并兼有用户焦点。(有时也拿此态称为“运行着”。)

暂停
外一个 Activity 位于屏幕前台并兼有用户焦点,但这 Activity
仍可见。也就是说,另一个 Activity 显示在是 Activity 上方,并且该
Activity 部分透明或非覆盖全屏幕。 暂停的 Activity
处于完全活动状态(Activity 对象保留在内存中,它保留了具有状态及成员信息,并与窗口管理器保持连续),但以内存极度不足的图景下,可能会见被网已。

停止
拖欠 Activity 被别一个 Activity 完全覆盖(该 Activity 目前位于“后台”)。
已停的 Activity
同样遵循处在活动状态(Activity 对象保留在内存中,它保留了装有状态和分子信息,但以及窗口管理器连接)。
不过,它对用户不再可见,在他远在索要外存时可能会见于网已。

一旦 Activity
处于停顿或停状态,系统可透过要求该得了(调用其 finish() 方法)或直接住该过程,将那由外存中删除。(将该得了或停止后)再次打开
Activity 时,必须重建。

落实生命周期回调

当一个 Activity
转入和转出上述不同状态时,系统会由此各种回调方法为该发出通告。
所有回调方法还是沟通,您可以于 Activity
状态发生变化时替代这些关系来实施相应操作。 以下框架 Activity
包括每一个骨干生命周期方法:

public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
    }
    @Override
    protected void onStart() {
        super.onStart();
        // The activity is about to become visible.
    }
    @Override
    protected void onResume() {
        super.onResume();
        // The activity has become visible (it is now "resumed").
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Another activity is taking focus (this activity is about to be "paused").
    }
    @Override
    protected void onStop() {
        super.onStop();
        // The activity is no longer visible (it is now "stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // The activity is about to be destroyed.
    }
}

  

:正如以上示例所示,您当落实这些生命周期方法时得尽先调用超类实现,然后再实践外操作。

这些艺术齐定义 Activity 的凡事生命周期。您得经过落实这些主意监控
Activity 生命周期中之老三只嵌套循环:

  • Activity
    任何生命周期发生在 onCreate() 调用与 onDestroy() 调用内。您的
    Activity
    应于 onCreate() 中执“全局”状态设置(例如定义布局),并释放 onDestroy() 中之具备其他资源。例如,如果您的
    Activity
    有一个每当后台运行的线程,用于自网上下载数据,它或许会见当 onCreate() 中开创该线程,然后于 onDestroy() 中停止该线程。
  • Activity
    看得出生命周期发生在 onStart() 调用与 onStop() 调用内。在马上段时光,用户可于屏幕上看到
    Activity 并跟那个相。 例如,当一个新 Activity 启动,并且这个 Activity
    不再可见时,系统会调用 onStop()。您可以当调用这简单个主意中保留为用户展示
    Activity 所用的资源。
    例如,您可于 onStart() 中注册一个 BroadcastReceiver 以监察影响
    UI
    的变动,并在用户无法还望而展示的始末经常在 onStop() 中用那个撤销注册。在
    Activity 的浑生命周期,当 Activity
    在针对用户可见和藏身两栽状态中交替变化时,系统或者会见反复调用 onStart() 和 onStop()

  • Activity
    前台生命周期发生在 onResume() 调用与 onPause() 调用内。在这段日子,Activity
    位于屏幕上的所有其他 Activity 之前,并持有用户输入焦点。 Activity
    可反复转入和转出前台 —
    例如,当设备转入休眠状态或出现对话框时,系统会调用 onPause()
    由于这个态恐怕时时有变动,因此这简单单主意吃应采用适度轻量级的代码,以避免因为变速度放缓而为用户等。

图 1 证实了这些循环和 Activity
在状态转变中可能通过的路线。矩形表示回调方法,当 Activity
在不同状态里变更时,您可实现这些措施来实施操作。

图 1. Activity 生命周期。

表 1
列有了一如既往之生命周期回调方法,其中对各级一样种植回调方法做了又详实的叙述,并说明了各个一样种植方式以
Activity 整个生命周期内之职务,包括于回调方法好后系统是否止
Activity。

表 1. Activity 生命周期回调方法汇总表。

方法

说明

是否能后停止?

后接

onCreate()

首不良创 Activity 时调用。 您该当这方吃实践有正规的静态设置 —
创建视图、将数据绑定到列表等等。 系统为此方式传递一个 Bundle
对象,其中含有 Activity
的上一状态,不过前提是捕获了该状态(请参考后文的保存 Activity
状态)。

老后接 onStart()

onStart()

    

onRestart()

在 Activity 已偃旗息鼓并将重新启动前调用。

直后接 onStart()

onStart()

onStart()

于 Activity 即将对用户可见之前调用。

假定 Activity 转入前台,则晚接 onResume(),如果 Activity
转入隐藏状态,则晚接 onStop()

onResume() 

onStop()

    

onResume()

每当 Activity 即将上马同用户进行互之前调用。 此时,Activity 处于
Activity 堆栈的顶层,并兼有用户输入焦点。

一味后接 onPause()

onPause()

onPause()

当系统即将上马继续另一个 Activity 时调用。
此方法一般用于确认对持久性数据的莫保存更改、停止动画以及任何可能吃 CPU
的始末,诸如此类。 它当特别高效地尽所急需操作,因为她回到后,下一个
Activity 才会继续执行。

如若 Activity 返回前台,则晚接 onResume(),如果 Activity
转入对用户不可见状态,则晚连onStop()

onResume() 

onStop()

onStop()

于 Activity 对用户不再可见时调用。如果 Activity 被销毁,或其它一个
Activity(一个现有 Activity 或新
Activity)继续执行并以那个遮住,就可能有这种状态。

若果 Activity 恢复跟用户的竞相,则晚接 onRestart(),如果 Activity
被销毁,则后接onDestroy()

onRestart()

onDestroy()

onDestroy()

在 Activity 被销毁前调用。这是 Activity 将接受的末段调用。 当 Activity
结束(有人对 Activity 调用了 finish()),或系统为节空间要暂时销毁该
Activity 实例时,可能会见调用它。
您得由此 isFinishing() 方法分别这有限栽状况。

称为也“是否能后终止?”的排列表示系统是否能在非执外一行 Activity
代码的状下,在方式返回后天天终止承载 Activity 的长河。 有三独法子带

有“是”标记:(onPause()onStop() 和 onDestroy())。由于 onPause() 是立三独章程被的第一只,因此
Activity 创建后,onPause() 必定成为终极调用的点子,然后才会终止进程 —
如果系统于紧急情况下必须恢复内存,则恐无见面调用 onStop() 和 onDestroy()。因此,您应该利用 onPause() 向存储设备写副至关重要的持久性数据(例如用户编辑)。不过,您当对 onPause() 调用中必须保留的音讯享有选择,因为该方法被的任何阻挡过程还见面伤向下一个
Activity 的生成并拖慢用户体验。

是不是能够于后头停?排着标记为“否”的不二法门而由系统调用它们的少时于预防承载
Activity 的历程被终止。
因此,在从 onPause() 返回的流年及onResume() 被调用的日,系统可住
Activity。在 onPause() 被重新调用并回前,将无法再停下 Activity。

:根据表 1 中之定义属于技术及无法“终止”的 Activity
仍可能于系统已 —
但这种情况只有以管别其他资源的无比情况下才会出。经过以及线程处理文档对或会见已
Activity 的事态召开了还详实的阐释。

保存 Activity 状态

治本 Activity
生命周期的引言部分简要提及,当
Activity 暂停或者停时,Activity 的状态会获取保留。 确实如此,因为当
Activity 暂停或停止时,Activity 对象仍保存在内存中 —
有关该成员及当前状态的具有消息以居于活动状态。 因此,用户以 Activity
内所举行的其它变更都见面获得保留,这样一来,当 Activity
返回前台(当其“继续”)时,这些反仍然在。

可是,当系统为还原内存而销毁某项 Activity
时,Activity 对象也会见被灭绝,因此系统于延续 Activity
时根本无法让那个状态保持完好,而是必须在用户返回 Activity
时重建 Activity 对象。但用户并不知道系统销毁 Activity
后又对其开展了重建,因此他们那个可能以为 Activity 状态并非变化。
在这种情况下,您得实现任何一个回调方法对关于 Activity
状态的消息进行封存,以担保有关 Activity
状态的基本点消息获得保留:onSaveInstanceState()

网会先调用 onSaveInstanceState(),然后重新使 Activity
变得容易销毁。系统会向该措施传递一个 Bundle,您可当里头使用 putString() 和putInt() 等办法以名称-值对形式保留有关
Activity 状态的信息。然后,如果系统已您的采用进程,并且用户返回您的
Activity,则网会重建该
Activity,并拿 Bundle 同时传递给 onCreate() 和 onRestoreInstanceState()。您可动用上述任一道从 Bundle 提取您保存之状态并还原该
Activity
状态。如果没状态信息需要还原,则传递让你的 Bundle 是空值(如果是首蹩脚创该
Activity,就会见冒出这种状况)。

图 2. 在片栽情形下,Activity
重获用户焦点时可保障状态完好:系统于销毁 Activity 后重建
Activity,Activity 必须恢复之前封存之状态;系统已 Activity 后蝉联实施
Activity,并且 Activity 状态保持整体。

:无法保证系统会于销毁而的 Activity
前调用 onSaveInstanceState(),因为是无需要保留状态的情景(例如用户采取“返回”按钮离开而的
Activity 时,因为用户之行事是于显式关闭
Activity)。 如果系统调用 onSaveInstanceState(),它见面于调用 onStop() 之前,并且可能会见在调用onPause() 之前进行调用。

但,即使你呀还无开,也未落实 onSaveInstanceState()Activity 类的 onSaveInstanceState() 默认实现为会见过来部分
Activity
状态。具体地开口,默认实现会晤为布局中的每个 View 调用相应的 onSaveInstanceState() 方法,让每个视图都能够提供关于自之许诺保存信息。Android
框架中几每个微部件都见面根据需要贯彻这方法,以便在重建 Activity
时自动保存和恢复对 UI
所召开的旁可见更改。例如,EditText 小部件保存用户输入的别样文件,CheckBox 小部件保存复选框的当选或无入选状态。您才待呢感怀如果保存其状态的每个微部件提供一个唯一的
ID(通过 android:id 属性)。如果小部件没有
ID,则网无法保存其状态。

您还足以经将android:saveEnabled 属性设置为"false" 或透过调用setSaveEnabled() 方法显式阻止布局内之视图保存其状态。您便不承诺将欠属性停用,但如若您想坐不同方法恢复
Activity UI 的状态,就可能用这么做。

尽管 onSaveInstanceState() 的默认实现会晤保留有关您的Activity UI
的来因此信息,您或许按照需要替换其以保存更多信息。例如,您可能用保留在
Activity 生命周期内生了转之成员值(它们或者与 UI
中平复的值有涉嫌,但默认情况下网未见面恢复储存这些 UI 值的积极分子)。

由于 onSaveInstanceState() 的默认实现推动保存 UI
的状态,因此而您为保存更多状态信息而替换该方式,应尽先调用 onSaveInstanceState() 的超类实现,然后再实践外操作。
同样,如果你替换onRestoreInstanceState() 方法,也承诺调用它的超类实现,以便默认实现能够过来视图状态。

:由于无法保证系统会调用 onSaveInstanceState(),因此而才承诺使用它来记录
Activity 的瞬态(UI 的状态)—
切勿使它们来储存持久性数据,而应利用 onPause() 在用户距离 Activity
后存储持久性数据(例如应封存及数据库的数额)。

您就需要转设备,让屏幕方向发生变化,就可知行地测试你的用的状态回升能力。
当屏幕方向转变时,系统会销毁并重建
Activity,以便使可供应新屏幕配置利用的备用资源。 单凭这同理由,您的
Activity
在重建时是否完全恢复其状态就显得异常重要,因为用户以应用以时经常需要旋转屏幕。

拍卖配置变更

稍微设备配备或者会见以运转时发生变化(例如屏幕方向、键盘可用性和言语)。
发生此类变化时,Android 会重建运行面临之
Activity(系统调用onDestroy(),然后立即调用 onCreate())。此行为旨在通过下公提供的备用资源(例如适用于不同屏幕方向与屏幕尺寸的不比布局)自动重新加载您的下来辅助她适应新配置。

要您对 Activity
进行了适合设计,让它能够依照上述所述处理屏幕方向变化带来的再开并回复
Activity 状态,那么以遭遇 Activity
生命周期中之别样意外事件时,您的利用将拥有双重强的适应性。

恰巧使齐文所述,处理此类重开的最佳办法是下onSaveInstanceState() 和 onRestoreInstanceState()(或 onCreate())保存并恢复
Activity 的状态。

比方用询问有关运行时起的部署变更和对办法的详细信息,请看拍卖运行时转指南。

协调 Activity

当一个 Activity 启动另一个 Activity
时,它们还见面体会及生命周期转变。第一单 Activity
暂停并停(但假如它们以后台还可见,则非见面停止)时,同时系统会创另一个
Activity。 如果这些 Activity
共用保存至磁盘或任何地方的数据,必须询问之是,在创造第二个 Activity
前,第一只 Activity 不见面全盘停下。更当地游说,启动第二独 Activity
的经过以及住第一单 Activity 的长河在重叠。

生命周期回调的相继经过明确概念,当半独 Activity 位于同一进程,并且鉴于一个
Activity 启动另一个 Activity 时,其定义尤其明显。 以下是当 Activity A
启动 Activity B 时同多样操作的有顺序:

  1. Activity A 的 onPause() 方法执行。
  2. Activity B
    的 onCreate()onStart() 和 onResume() 方法依次执行。(Activity
    B 现在具有用户焦点。)
  3. 然后,如果 Activity A 在屏幕及不再可见,则该 onStop() 方法执行。

卿得下这种可预测的生命周期回调顺序管理由一个 Activity 到其他一个
Activity 的信变更。 例如,如果你必须于率先个 Activity
停止时向数据库写副数据,以便下一个 Activity
能够读取该数额,则承诺以 onPause() 而不是 onStop() 执行中往数据库写副数据。

 

摘自Android官方文档:https://developer.android.google.cn/guide/components/activities.html

 

Activity系列文章:

Android之Activity系列总结(一)–Activity概览

Android之Activity系列总结(二)–任务以及返回栈

Android
旋转屏幕–处理Activity与AsyncTask的特级解决方案(处理运行时转)

 Activity之概览屏幕(Overview
Screen)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图