2018正版葡京赌侠诗Android之Activity系列总括(一)–Activity概览

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
在不同处境之间转变时,您可以兑现那个艺术来执行操作。

2018正版葡京赌侠诗 1

图 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,就会并发这种状态)。

2018正版葡京赌侠诗 2

图 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)

发表评论

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