Android复习(六)核心组件—>Activity 简介、生命周期、状态变更
1. 可以在activity上声明权限,来保证只在进入某个activity是否有某种权限
<manifest>
<activity android:name="...."
android:permission=”com.google.socialapp.permission.SHARE_POST” />
2.生命周期流程图
3.activity状态和内存中弹出
系统永远不会直接终止 Activity 以释放内存,而是会终止 Activity 所在的进程。系统不仅会销毁 Activity,还会销毁在该进程中运行的所有其他内容。
| 系统终止进程的可能性 | 进程状态 | Activity 状态 |
|---|---|---|
| 小 | 前台(拥有或即将获得焦点) | 已创建 已开始 已恢复 |
| 中 | 后台(失去焦点) | 已暂停 |
| 大 | 后台(不可见) | 已停止 |
| 空 | 已销毁 |
4. 保存数据和回复数据
当activity销毁时,应该调用 onSaveInstanceState()
当需要恢复数据时,应该调用 onRestoreInstanceState() 而不要在onCreat中处理这些事情,虽然得到的bundle对象是相同的
5. Activity状态变更
5.1 配置发生了改变
有很多事件会触发配置更改。最显著的例子或许是横屏和竖屏之间的屏幕方向变化。其他情况,如语言或输入设备的改变等,也可能导致配置更改。
当配置发生更改时,Activity 会被销毁并重新创建。原始 Activity 实例将触发 onPause()、onStop() 和 onDestroy() 回调。系统将创建新的 Activity 实例,并触发 onCreate()、onStart() 和 onResume() 回调。
结合使用 ViewModels、onSaveInstanceState() 方法和/或持久性本地存储,可使 Activity 的界面状态在配置发生更改后保持不变。在决定这些选项的组合方式时,需要考虑界面数据的复杂程度、应用的用例以及检索速度与内存使用的权衡。有关保存 Activity 界面状态的详情,请参阅保存界面状态。
5.2 处理多窗口的情况
一旦应用进入多窗口模式(适用于 Android 7.0(API 级别 24)及更高级别),系统会向当前运行的 Activity 发送配置更改通知,从而完成上述生命周期转换。如果已经处于多窗口模式的应用调整了大小,也会出现这种行为。您的 Activity 可以自行处理配置更改,也可以让系统销毁 Activity 并使用新维度重新创建一个。
有关多窗口模式生命周期的详情,请参阅多窗口模式支持页的多窗口模式生命周期部分。
在多窗口模式下,虽然用户可以看到两个应用,但只有与用户交互的应用位于前台且具有焦点。该 Activity 处于“已恢复”状态,而另一个窗口中的应用则处于“已暂停”状态。
当用户从应用 A 切换到应用 B 时,系统会对应用 A 调用 onPause(),对应用 B 调用 onResume()。每当用户在应用之间切换时,系统就会在这两种方法之间切换。
有关多窗口模式的详情,请参阅多窗口模式支持。
5.3 Activity或对话框显示在前台
如果有新的 Activity 或对话框出现在前台,并且局部覆盖了正在进行的 Activity,则被覆盖的 Activity 会失去焦点并进入“已暂停”状态。然后,系统会调用 onPause()。
当被覆盖的 Activity 返回到前台并重新获得焦点时,会调用 onResume()。
如果有新的 Activity 或对话框出现在前台,夺取了焦点且完全覆盖了正在进行的 Activity,则被覆盖的 Activity 会失去焦点并进入“已停止”状态。然后,系统会快速地接连调用 onPause() 和 onStop()。
当被覆盖的 Activity 的同一实例返回到前台时,系统会对该 Activity 调用 onRestart()、onStart() 和 onResume()。如果被覆盖的 Activity 的新实例进入后台,则系统不会调用 onRestart(),而只会调用 onStart() 和 onResume()。
注意:当用户点按“概览”或主屏幕按钮时,系统的行为就好像当前 Activity 已被完全覆盖一样。
5.4 用户点击返回按钮
如果 Activity 位于前台,并且用户点按了返回按钮,Activity 将依次经历 onPause()、onStop() 和 onDestroy() 回调。活动不仅会被销毁,还会从返回堆栈中移除。
需要注意的是,在这种情况下,默认不会触发 onSaveInstanceState() 回调。此行为基于的假设是,用户点按返回按钮时不期望返回 Activity 的同一实例。不过,您可以通过替换 onBackPressed() 方法实现某种自定义行为,例如“confirm-quit”对话框。
如果您替换 onBackPressed() 方法,我们仍然强烈建议您从被替换的方法调用 super.onBackPressed()。否则,返回按钮的行为可能会让用户感觉突兀。
5.5 系统终止应用程序
6.
Android复习(六)核心组件—>Activity 简介、生命周期、状态变更的更多相关文章
- Android四大组件之——Activity的生命周期(图文详解)
转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai 联系方式:JohnTsai.Work@gmail.com [Andro ...
- Android应用程序中Activity的生命周期
Android应用程序中Activity的生命周期 对于Android来说Activity的生命周期是非常的重要,尤其是对于新学者来说,只有充分了解了Activity的生命周期,才能写出优良用户体验的 ...
- android学习四(Activity的生命周期)
要学好活动(Activity).就必需要了解android中Activity的声明周期.灵活的使用生命周期.能够开发出更好的程序,在android中是使用任务来管理活动的,一个任务就是一组存放在栈里的 ...
- 【Android】11.1 Activity的生命周期和管理
分类:C#.Android.VS2015: 创建日期:2016-02-21 一.基本概念 1.必须理解这些方法,否则你编的程序根本就没法在实际项目中使用 当然,如果仅仅是为了玩玩,或者仅仅是作为例子为 ...
- Android艺术——深看Activity的生命周期
探究Activity的生命周期 1.典型情况下的生命周期分析:onCreate 初始化工作,加载布局资源和数据:onStart ac正在启动但是无法交互,后台:onResume ac可见,显示在前台: ...
- 朝花夕拾-android 自定义application 管理activity的生命周期
为了安全退出多个已创建的activity? 可以自定义application:myapplication. 增加一个list成员保存,一些关键的已创建的activity实例: private List ...
- 第三章:Activity的生命周期
一:Activity的生命周期方法 Android提供了很多Activity的生命周期方法,比如我们常用的onCreate.onPause.onResume等.这里主要介绍粗粒度的周期方法,诸如onP ...
- Android中Activity的生命周期
简介: 这个基本是必问的问题了,说一下你对Activity生命周期的理解,呵呵… onCreate, onStart, onResume, onPause, onStop, onDestroy, on ...
- android学习——activity的生命周期
Android中主要组件之Activity的生命周期,基本都是翻译Android API和个人的理解. 首先看一下Android api中所提供的Activity生命周期图: Activity其实是继 ...
- Android开发之Activity的生命周期以及加载模式
本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...
随机推荐
- 【Scala】05 对象特性Part2
特质重复继承关系 父类特质 A 子类特质B 继承 A 子类特质C 继承A 类D 继承了 B 又实现了 C class D extends B with C 继承顺序是 D 继承 C 继承 B 继承 A ...
- 【MacOS】VMware安装10.15-Catalina版本
参考自: https://www.bilibili.com/video/BV1sf4y1D77A?p=4 资源地址: https://pan.baidu.com/s/1U6WOorb_TuORQ9ab ...
- 目前AI模型与CAE(计算机辅助工程)结合所能达到的技术水平?
相关: https://www.anscos.com/odyssee.html ODYSSEE CAE只需进行几次先前的CAE模拟,即可实时预测.优化并可靠地生成准确的结果.ODYSSEE CAE以非 ...
- Google的Jax框架的JAX-Triton目前只能成功运行在TPU设备上(使用Pallas为jax编写kernel扩展)—— GPU上目前无法正常运行,目前正处于 experimental 阶段
使用Pallas为jax编写kernel扩展,需要使用JAX-Triton扩展包.由于Google的深度学习框架Jax主要是面向自己的TPU进行开发的,虽然也同时支持NVIDIA的GPU,但是支持力度 ...
- flex布局被内容被撑开及flex布局下定宽元素被压缩
实现效果使用flex进行左右布局,左边定宽200px,右边自适应,当右边内容过多,造成右边盒子被撑开,会造成两种问题 左边定宽盒子被压缩解决办法: flex-grow:0;//是否自动增长空间 fle ...
- SMU Autumn 2023 Round 5
SMU Autumn 2023 Round 5 A. Everyone Loves to Sleep 把时间都转成分钟,然后存起来,二分找到离他睡觉点最近的一个时间段,减去他的睡觉点,如果最近的在第二 ...
- 在VS Code中使用Snippet Craft扩展提高编码效率
Snippet Craft 一个VS Code代码片段管理插件 功能 创建和插入代码片段 在编辑器区域右键菜单中点击插入Snippet,或在代码片段视图中点击条目,则会将代码片段插入到当前激活文档的光 ...
- Docker 构建多平台镜像
构建多平台镜像的方法分为两种:一种是在不同平台的机器上分别构建并推送对应平台的镜像,然后通过 Docker Manifest 将两个镜像标签合并为一个.另一种是通过 Docker buildx 在一台 ...
- 😶🌫️ SpringBoot中MongoDB的骚操作用法
不知道大家在工作项目中有没有使用MongoDB,在哪些场景中使用.MongoDB作为NoSQL数据库,不像SQL数据库那样,可以使用Mybatis框架. 如果需要在SpringBoot中使用Mongo ...
- OpenTelemetry 实战:gRPC 监控的实现原理
前言 最近在给 opentelemetry-java-instrumentation 提交了一个 PR,是关于给 gRPC 新增四个 metrics: rpc.client.request.size: ...