当activity改变时,我们如何处理它

Posted zanzg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当activity改变时,我们如何处理它相关的知识,希望对你有一定的参考价值。

用户和系统触发-的事件,可能造成一个activity状体的改变。这个文档描述了一些常见的情况,和如何去处理这些改变。

原网站:https://developer.android.google.cn/guide/components/activities/state-changes

这篇文章包括:

                    配置改变发生,

                    处理多窗口实例,

                    Activity或者dialog显示在前端(foreground),

                    当用户按下back键,

                    系统杀死app进程

1.  配置改变发生

有一些事件可以触发配置的改变。最经典的莫过于手机方向的变化。改变语言或者输入设备也会改变配置。

        当配置改变发生时,activity先辈毁灭,然后再被创建。原activity会依次调用onPause(),onStop(),onDestory()回调方法。一个新的activity然后被创建,一次会调用onCreate(),onStart(),onResume()方法

在配置变化的过程中,使用viewModel,onSaveInstanceState,当地存储 共同去保存activity的UI状态。决定如何去结合使用这些方法,依赖于你的UI数据,app的用例,和检索速度与内存使用的考虑。

关于更多的信息,可以看https://developer.android.google.cn/guide/components/activities/activity-lifecycle.html

ViewModel可以帮助你管理生命周期,可以看https://developer.android.google.cn/topic/libraries/architecture/viewmodel.html了解更多

2. 处理多窗口实例

当app进入多窗口模式模式,在android7.0(api level 24)版本或者更高版本可以使用,系统会通知当前activity配置发生改变,使用上述步骤调用生命周期方法。如果已经处于多窗口模式,调整边界大小也会引发配置改变。

更多处理多窗口生命周期方法可以看https://developer.android.google.cn/guide/topics/ui/multi-window.html

在多窗口模式中,尽管有多个app显示,只有一个app是获得焦点能够和用户 交互的。可以交互的app处于运行状态,另外的处于暂停状态。

当用户从当前app跳转到另一个app,系统会调用onPause方法对当前app,对另一个app调用onResume方法。

3. Activity或者dialog显示在前端(foreground)

如果一个新的activity或者dialog显示在前端,获取焦点并且部分显示在当前activity的前面。被覆盖的activity会丧失焦点进入暂停 状态。

当被覆盖的activity返回到前端再次获取焦点,会调用onResume方法

 

如果完全覆盖,会调用onPause和onStop方法。

当完全被覆盖的同一个activity实例返回到前端时,会调用onRestart,onStart,onResume方法。

当完全被覆盖的一个新的activity实例返回到前端时,对调用onStart,onResume

注意:用户按下button和完全覆盖的表现一样。

4. 当用户按下back键

如果用户按下back键,activity会经历onPause,onStop,onDestory方法。除了被毁灭外,这个activity还会从栈中被移除.

 

这是十分重要的去注意,在这种情况下,onSaveInstanceState方法不会被调用。这是基于一个假设,用户按下返回键不会再次返回。但是,你可以重写onBackPressed方法去实现一些定制的行为,例如一个confirm-quit dialog。

 

如果你重写这个方法,推荐在你重写的方法中调用super.onBackPressed

方法,否则当用户按下back按钮时,可能会有感到不友好的感觉。

5. 系统杀死app进程

如果app在前端运行,系统需要为他获取更多的内存,处于后台的app可能会被杀死释放内存。

关于更多https://developer.android.google.cn/guide/components/activities/activity-lifecycle.html#asem

https://developer.android.google.cn/guide/components/activities/activity-lifecycle.html#saras

 

以上是关于当activity改变时,我们如何处理它的主要内容,如果未能解决你的问题,请参考以下文章

当 Firebase 通知到达并且我打开了应用程序时,如何处理它?

Google 官方详解 Activity项目实例不容错过!

最佳实践:在 php-doc 中使用 @throws,以及如何处理它

我认为适用于 Android 的 Google Chrome 有一个奇怪的视口高度错误,应该修复它。现在,你如何处理它?

如何处理角度 6 中的多个 mat-slide-toggle 标签?

如何处理自定义 android 视图/小部件的可见性更改