四大组件:Activity生命周期-Android12

  Activity 类是 Android 应用的关键组件,而 Activity 的启动和组合方式则是该平台应用模型的基本组成部分。在java编程范式中,应用是通过 main() 方法启动的,而 Android 系统与此不同,它会调用与其生命周期特定阶段相对应的特定回调方法来启动 Activity 实例中的代码。

1. Activity生命周期

1.1 Activity生命周期方法说明

android官网 了解 Activity 生命周期

回调 描述
onCreate() 必须实现此回调,它会在系统创建您的 Activity 时触发。您的实现应该初始化 Activity 的基本组件:例如,您的应用应该在此处创建视图并将数据绑定到列表。最重要的是,您必须在此处调用 setContentView() 来定义 Activity 界面的布局。
onStart() onCreate() 退出后,Activity 将进入“已启动”状态,并对用户可见。此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。
onResume() 系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在 onResume() 方法中实现的。
onPause() 当 Activity 失去焦点并进入“已暂停”状态时,系统就会调用 onPause()。例如,当用户点按“返回”或“最近使用的应用”按钮时,就会出现此状态。当系统为您的 Activity 调用 onPause() 时,从技术上来说,这意味着您的 Activity 仍然部分可见,但大多数情况下,这表明用户正在离开该 Activity,该 Activity 很快将进入“已停止”或“已恢复”状态。

如果用户希望界面继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,用户仍希望其界面继续更新。

您不应使用 onPause() 来保存应用或用户数据、进行网络呼叫或执行数据库事务。

onStop() 当 Activity 对用户不再可见时,系统会调用 onStop()。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入“已恢复”状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。

系统调用的下一个回调将是 onRestart()(如果 Activity 重新与用户互动)或者 onDestroy()(如果 Activity 彻底终止)。

onRestart() 当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。

此回调后面总是跟着 onStart()

onDestroy() 系统会在销毁 Activity 之前调用此回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。

1.2 Activity.java流程源码对照

AMS:startActivity桌面启动应用、应用内部启动startActivity-Android12、Activity相关初始化-Android12

  • Activity -- Instrumentation -- AMS/ATMS – Instrumentation – Activity 回调基本都是perform打头的方法:
    Android中Binder用于不同进程之间通信

  • Instrumentation.java 与之对应的是callActivity打头的方法:

  • ActivityThread中调用Instrumentation;Android P之后对应各种ActivityLifecycleItem

Android P 上新增 Android P Basic lifecycle transaction containers :

  1. ActivityThread继承的是ClientTransactionHandler
  2. ClientLifecycleManager.java/ClientTransaction.java --> TransactionExecutor.java/ClientTransactionHandler.java
  3. ClientTransaction中添加各种流程ActivityLifecycleItem,执行execute()最终调用的也是 class ActivityThread extends ClientTransactionHandler中方法。将原先class H extends Handler中处理转移到了,替换EXECUTE_TRANSACTION执行mTransactionExecutor.execute(transaction)

1.3 Event相关日志

通常比较关注的是wm_on_resume_called,表示已经准备完成,界面显示了

frameworks/base/core/java/android/app/EventLogTags.logtags

# See system/core/logcat/event.logtags for a description of the format of this file.option java_package android.app# Do not change these names without updating the checkin_events setting in
# google3/googledata/wireless/android/provisioning/gservices.config !!
#
# The activity's onPause has been called.
30021 wm_on_paused_called (Token|1|5),(Component Name|3),(Reason|3)
# The activity's onResume has been called.
30022 wm_on_resume_called (Token|1|5),(Component Name|3),(Reason|3)# The activity's onStop has been called.
30049 wm_on_stop_called (Token|1|5),(Component Name|3),(Reason|3)# The activity's onCreate has been called.
30057 wm_on_create_called (Token|1|5),(Component Name|3),(Reason|3)
# The activity's onRestart has been called.
30058 wm_on_restart_called (Token|1|5),(Component Name|3),(Reason|3)
# The activity's onStart has been called.
30059 wm_on_start_called (Token|1|5),(Component Name|3),(Reason|3)
# The activity's onDestroy has been called.
30060 wm_on_destroy_called (Token|1|5),(Component Name|3),(Reason|3)
# The activity's onActivityResult has been called.
30062 wm_on_activity_result_called (Token|1|5),(Component Name|3),(Reason|3)# The activity's onTopResumedActivityChanged(true) has been called.
30064 wm_on_top_resumed_gained_called (Token|1|5),(Component Name|3),(Reason|3)
# The activity's onTopResumedActivityChanged(false) has been called.
30065 wm_on_top_resumed_lost_called (Token|1|5),(Component Name|3),(Reason|3)

2. 启动应用:LaunchActivityItem、ResumeActivityItem

如图,启动应用时添加ClientTransaction中添加了LaunchActivityItem、ResumeActivityItem

  1. LaunchActivityItem、ResumeActivityItem都继承BaseClientRequest.java,基本处理preExecute、execute、postExecute
  2. 关注mTransactionExecutor.execute(transaction)处理:
public void execute(ClientTransaction transaction) {// ... ...executeCallbacks(transaction);executeLifecycleState(transaction);// ... ...
}

1》executeCallbacks(transaction)中transaction.getCallbacks()有LaunchActivityItem执行调用ActivityThread.handleLaunchActivity(),通过mInstrumentation.callActivityOnCreate()响应Activity.OnCreate(),执行后状态设置为ActivityClientRecord r.setState(ON_CREATE)
2》executeLifecycleState(transaction)中当前状态start = ON_CREATE, finish = ON_RESUME,中间缺少ON_START,所以cycleToPath()中间状态mTransactionHandler.handleStartActivity(),响应Activity.OnStart();最后执行请求ResumeActivityItem(即执行ActivityThread.handleResumeActivity()),响应Activity.OnResume()

2.1 启动应用流程截图

3 其他流程XXXActivityItem 待续

四大组件:Activity生命周期-Android12相关推荐

  1. 【Monica的android学习之路】四大组件的生命周期

    [Monica的android学习之路]四大组件的生命周期 1. Service 1.1 启动service 1.1.1 startService 1.1.2 bindService 1.2 死亡回调 ...

  2. Android四大基本组件和生命周期的介绍

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...

  3. Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.了解四大基本组件 Activity ...

  4. 【Android 四大组件之Activity】一文吃透Activity 生命周期

    作者:半身风雪 简介:在Android组件中最基本也是最为常见的四大组件: Activity Service服务 Content Provider内容提供者 BroadcastReceiver广播接收 ...

  5. android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]

    1 章节目录 2 Android Activity综述 2.1 Activity怎么用 2.2 layout - 界面布局 2.3 Java - 控制界面 2.4 AndroidManifest.xm ...

  6. activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)

    1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...

  7. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  8. Activity生命周期 onCreate onResume onStop onPause

    Android应用开发提高系列(6)--Activity生命周期 onCreate 和 onResume 在程序启动时候都会启动, 所有有些需要在onCreate onResume中都要实现的功能,之 ...

  9. 图解:Activity生命周期

    当用户需要对手机通过屏幕进行交互时,比如打一个电话,拍张照片,发送一个邮件,或者查看地图.开发者就需要实现一个活动(Activity).每个活动都将作为一个提供用户使用接口的窗口.它可以填满整个屏幕, ...

最新文章

  1. java定时器结合springboot_SpringBoot开发案例之整合定时任务(Scheduled)
  2. 【Homework】银行存取款业务
  3. 图的遍历、最小生成树、最短路径
  4. FioriLaunchpad.html的三个round-trip
  5. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
  6. linux bttrack服务,使用Docker安装OpenTracker,自建BT Tracker服务器
  7. html笔记——网页中视频播放,文字滚动
  8. Android开发之动态加载,运行未安装apk
  9. php 什么是 cookie? 会话 cookie 与持久性 cookie 之间 有何区别?
  10. css设置背景颜色的亮度
  11. Qt 常用文件对话框及消息对话框使用
  12. 自制hdmi线一头改vga图_什么是VGA?
  13. 海尔简爱S15电脑使用U盘来重新安装Win10系统教学
  14. 如何解决Java查看源代码时页面显示Source not found
  15. 在云服务器上部署项目(下)
  16. 软考中级-系统集成项目管理工程师-考试学习计划
  17. 英语口语练习一之work详解
  18. java毕业设计——基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码)——堡垒游戏
  19. 睿码主数据管理平台到底有啥不一样
  20. ChatGPT之父Sam Altman有多牛?

热门文章

  1. 一键查询物流,教你查找快递延误件并导出EXCEL表格
  2. Java程序设计 北京大学 Week3互评作业
  3. beats android 蓝牙连接电脑,Beats Solo3如何连接电脑 Beats Solo3连电脑方法【介绍】...
  4. 添加Google网络地图功能
  5. matlab氢原子杂化轨道,杂化轨道理论(sp3/sp2)
  6. JB测试之旅-浅谈自动化知识
  7. 牛客-计算机考研复试上机题-二次方程计算器
  8. common-lang的StringUtils工具类说明
  9. [electron 工具] 使用 electron、vue 和 nodejs 做一个网件路由器 SOAP API 测试工具之一 ( 简介 )...
  10. Unity Render Streaming使用方法,WebRTC的基础搭建使用