美文网首页
处理活动状态更改(活动三)

处理活动状态更改(活动三)

作者: 鹿小纯0831 | 来源:发表于2018-07-24 22:09 被阅读21次

不同的事件,一些是用户触发的,一些是系统触发的,可以导致Activity从一个状态转换到另一个状态。 本文档描述了发生此类转换的一些常见情况,以及如何处理这些转换。

有关活动状态的更多信息,请参阅了解活动生命周期。 要了解ViewModel类如何帮助您管理活动生命周期,请参阅了解ViewModel类。

一、发生配置更改

有许多事件可以触发配置更改。 也许最突出的例子是纵向和横向之间的变化。 可能导致配置更改的其他情况包括更改语言或输入设备。

发生配置更改时,将销毁并重新创建活动。 原始活动实例将触发onPause(),onStop()和onDestroy()回调。 将创建一个新的活动实例,并触发onCreate(),onStart()和onResume()回调。

使用ViewModel,onSaveInstanceState()方法和/或持久本地存储的组合来保持活动在配置更改中的UI状态。 决定如何组合这些选项取决于UI数据的复杂性,应用程序的用例以及检索速度与内存使用情况的关系。 有关保存活动UI状态的更多信息,请参阅保存UI状态。

1、处理多窗口案例

当应用程序进入多窗口模式(在Android 7.0(API级别24)及更高级别中可用)时,系统会通知当前正在运行的配置更改活动,从而完成上述生命周期转换。如果已经处于多窗口模式的应用程序调整大小,也会发生此行为。您的活动可以自行处理配置更改,也可以允许系统销毁活动并使用新维度重新创建活动。

有关多窗口生命周期的更多信息,请参阅“多窗口支持”页面的“多窗口生命周期”部分。

在多窗口模式中,尽管有两个应用程序对用户可见,但只有与用户交互的应用程序位于前台并具有焦点。该活动处于“已恢复”状态,而另一个窗口中的应用程序处于“暂停”状态。

当用户从应用程序A切换到应用程序B时,系统会在应用程序A上调用onPause(),在应用程序B上调用onResume()。每次用户在应用程序之间切换时,它都会在这两种方法之间切换。

有关多窗口的更多详细信息,请参阅多窗口支持。

二、活动或对话框出现在前台

如果前景中出现新活动或对话框,关注并部分覆盖正在进行的活动,则覆盖的活动将失去焦点并进入暂停状态。 然后,系统调用onPause()。

当覆盖的活动返回到前台并重新获得焦点时,它会调用onResume()。

如果前景中出现新活动或对话框,关注并完全覆盖正在进行的活动,则覆盖的活动将失去焦点并进入“已停止”状态。 然后系统快速连续调用onPause()和onStop()。

当覆盖活动的同一实例返回到前台时,系统会在活动上调用onRestart(),onStart()和onResume()。 如果它是覆盖活动的新实例,则系统不会调用onRestart(),只调用onStart()和onResume()。

注意:当用户点击“概览”或“主页”按钮时,系统的行为就像当前活动已完全覆盖一样。

三、用户点击后退按钮

如果活动位于前台,并且用户点击“返回”按钮,则活动将转换为onPause(),onStop()和onDestroy()回调。 除了被销毁之外,活动也从后台堆栈中移除。

重要的是要注意,默认情况下,onSaveInstanceState()回调在这种情况下不会触发。 此行为基于用户点击“后退”按钮而不期望返回到活动的同一实例的假设。 但是,您可以覆盖onBackPressed()方法以实现某些自定义行为,例如“confirm-quit”对话框。

如果重写onBackPressed()方法,我们仍然强烈建议您从重写方法调用super.onBackPressed()。 否则,后退按钮行为可能会对用户产生不良影响。

四、系统杀死应用程序进程

如果应用程序在后台并且系统需要为前台应用程序释放额外的内存,则系统可以终止后台应用程序以释放更多内存。 要了解有关系统如何决定销毁哪些进程的更多信息,请阅读活动状态以及从内存和进程以及应用程序生命周期中弹出。

要了解在系统终止应用程序进程时如何保存活动UI状态,请参阅保存和恢复活动状态。

相关文章

  • 处理活动状态更改(活动三)

    不同的事件,一些是用户触发的,一些是系统触发的,可以导致Activity从一个状态转换到另一个状态。 本文档描述了...

  • ansible tower 用户界面

    Activity Stream 活动流 活动流显示特定对象的所有更改。对于每个更改,活动流都会显示事件的时间,发起...

  • 活动状态

    1.运行状态 返回栈栈顶,处于运行状态 2.暂停状态 不处于栈顶,但依然可见(不是所有活动都占满屏幕),回收会影响...

  • Android编程——Activity详解

    1. 创建活动 2. 管理机制(任务栈管理方式,顶层活动位于栈顶) 3. 状态流程(不同状态有不同处理函数,调用时...

  • 活动的生命周期

    Android使用任务栈来管理活动,1.活动状态运行状态:一个活动位于返回栈的栈顶,活动就处于运行状态暂停状态:不...

  • 浅谈iOS中的程序的五种状态

    1、程序的五种状态Not Running:未运行。Inactive:前台非活动状态。处于前台,但是不能接受事件处理...

  • [iOS中的程序的五种状态]

    1、程序的五种状态Not Running:未运行。Inactive:前台非活动状态。处于前台,但是不能接受事件处理...

  • iOS APP 的五种状态

    1、程序的五种状态Not Running:未运行。Inactive:前台非活动状态。处于前台,但是不能接受事件处理...

  • 史上最精炼android四大组件基础总结(忘记了的可以过一遍)

    Android基础知识总结 四大组件之一活动 活动状态 运行状态:活动处于栈顶 暂停状态:活动不处于栈顶,但仍然可...

  • 35-Swift之UIActivityIndicatorView

    一、UIActivityIndicatorView 的介绍 活动指示器,作用是指示网络数据获取的状态或者App处理...

网友评论

      本文标题:处理活动状态更改(活动三)

      本文链接:https://www.haomeiwen.com/subject/bbxumftx.html