【Android -- 四大组件】Activity 知识点

一、前言

定义

属于 Android 四大组件之一:ActivityServiceBroadcastReceiverContentProvider

作用

显示界面 & 与用户进行交互。

  • 一个 Activity 通常是一个界面,是四大组件唯一能被用户感知的;
  • 每个活动被实现为一个独立的类, & 从活动基类继承过来;
  • Activity 之间通过 Intent 进行通信。

二、Activity 的生命周期

生命周期:onCreate() -> onStart() - > onResume() -> onPause() -> onStop() -> onDestroy()
生命周期

  • 启动 Activity:系统先调用 onCreate(),然后调用 onStart(),最后调用 onResume()方法,Activity 进入运行状态。

  • Activity 被其他 Activity 覆盖其上(DialogActivity)或者锁屏:系统会调用 onPause() 方法,暂停当前 Activity 的执行。

  • 当前 Activity 由被覆盖状态回到前台或者解锁屏:系统会调用 onResume() 方法,再次进入运行状态。

  • 当前 Activity 转到新的 Activity 界面或按 Home 键回到主屏,自身退居后台:系统会先调用onPause() 方法,然后调用 onStop() 方法,进入停滞状态。

  • 用户后退回到此 Activity:系统会先调用 onRestart() 方法,然后调用 onStart() 方法,最后调用 onResume() 方法,再次进入运行状态。

  • 当前 Activity 处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前 Activity,而后用户退回当前 Activity:再次调用 onCreate() 方法、onStart() 方法、onResume() 方法,进入运行状态。

  • 用户退出当前 Activity:系统先调用 onPause() 方法,然后调用 onStop() 方法,最后调用onDestory() 方法,结束当前 Activity。

  • onRestart():表示 Activity 正在重新启动 ,一般情况下,当前 Activity 从不可见重新变成可见状态时,onRestart() 就会被调用,这种情形一般是用户行为所导致的,比如用户按 Home 键切换到桌面然后重新打开 APP 或者按 Back 键。

  • onStart():Activity 可见了,但是还没有出现在前台,还无法和用户交互。

  • onPause():表示 Activity 正在停止,此时可以做一些存储数据,停止动画等工作,注意不能太耗时,因为这会影响到新 Activity 的显示,onPause() 必须先执行完,新的 Activity 的onResume() 才会执行。

  • 从 Activity 是否可见来说,onStart() 和onStop()是配对的,从activity是否在前台来说,onResume()和onPause()是配对的。

  • 旧 Activity 先 onPause(),然后新 Activity 再启动。

注意:当 Activity 中弹出 Dialog 对话框的时候,Activity 不会回调onPause()。
然而当 Activity 启动 Dialog 风格的 Activity 的时候,此 Activity 会回调 onPause() 函数。

三、异常情况下的生命周期

情况1:资源相关的系统配置发生改变导致 Activity 被杀死并重新创建

比如说当前 Activity 处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity 就会被销毁并且重新创建,当然我们也可以组织系统重新创建我们的 Activity。
生命周期
系统配置发生改变以后,Activity 会销毁,其 onPause(),onStop(),onDestory()均会被调用,由于 Activity 是在异常情况下终止的,系统会调用 onSaveInstance() 来保存当前 Activity 状态,这个方法的调用时机是在 onStop() 之前。与 onPause() 没有既定的时序关系,当 Activity 重新创建后,系统会调用 onRestoreInstanceState(),并且把 Activity 销毁时 onSaveInstanceState()方法保存的 Bundle 对象作为参数同时传递给 onRestoreInstanceState() 和 onCreate() 方法。
同时,在 onSaveInstanceState() 和 onRestoreInstanceState() 方法中,系统自动为我们做了一些恢复工作,如:文本框(EditeText)中用户输入的数据,ListView 滚动的位置等,这些 View相关的状态系统都能够默认为我们恢复。可以查看 View 源码,和 Activity 一样,每个 View 都有 onSaveInstanceState()方法和onRestoreInstanceState()方法。

情况2:资源内存不足导致低优先级的 Activity 被杀死

这里的情况和前面的情况1数据存储和恢复是完全一致的,Activity 按照优先级从高到低可以分为如下三种:
(1)前台 Activity — 正在和用户交互的Activity,优先级最高
(2)可见但非前台 Activity — 比如 Activity 中弹出了一个对话框,导致 Activity 可见但是位于后台无法和用户直接交互。
(3)后台 Activity — 已经被暂停的 Activity,比如执行了 onStop(),优先级最低。

横竖屏切换,防止重新创建 Activity:Activity 指定 configChange 属性来不让系统重新创建Activity。
android : configChanges = “orientation”

四、Activity 与 Fragment 生命周期关系

创建过程:
创建过程
销毁过程:
销毁过程

注意点

1. 生命周期方法是成对出现(配对)

  • onCreate() & onDestory()
  • onStart() & onStop()
  • onResume() & onPause()

2. onStart() & onStop()、onResume() & onPause() 除了回调时刻,在实际使用中无任何区别

  • onStart() & onStop() :从 Activity 是否完全可见的角度 进行回调
  • onResume() & onPause(): 从 Activity 是否位于前台(UI最顶层)的角度进行回调;

3. 当前 Activity 为 A,此时用户打开 ActivityB后,那么 A 的 onPause()和 B 的 onResume() 哪个方法先执行?
先 A的onPause() ,再B的onResume()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Android Studio开发环境搭建中创建一个Activity,你可以按照以下步骤进行操作: 1. 首先,在Android Studio中打开你的项目。 2. 在项目的资源视图中,右键点击"app"文件夹,选择"New",然后选择"Activity"。 3. 在弹出的对话框中,选择你想要创建的Activity类型,比如"Empty Activity"或"Basic Activity"。 4. 给你的Activity命名,并选择相关的选项,比如是否生成布局文件等。 5. 点击"Finish"按钮,Android Studio会自动生成相应的代码和布局文件。 6. 在生成的Activity类中,你可以添加你的业务逻辑和界面设计。 7. 如果需要,在AndroidManifest.xml文件中注册你的Activity,以便在应用程序中能够访问它。 这样,你就成功在Android Studio开发环境中创建了一个Activity。你可以根据你的需求在这个Activity中添加更多的功能和界面设计。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Android开发相关的学习资料](https://download.csdn.net/download/m0_57840386/85431994)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Android Studio开发环境的搭建](https://blog.csdn.net/weixin_41957626/article/details/127336213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Android Studio开发环境搭建](https://blog.csdn.net/weixin_64192827/article/details/127044187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin-Dev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值