四大组件:Activity生命周期-Android12
四大组件: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 失去了焦点,用户仍希望其界面继续更新。 您不应使用 |
onStop()
|
当 Activity 对用户不再可见时,系统会调用 onStop() 。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入“已恢复”状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。
系统调用的下一个回调将是 |
onRestart()
|
当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。
此回调后面总是跟着 |
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
:
ActivityThread
继承的是ClientTransactionHandler
ClientLifecycleManager.java/ClientTransaction.java --> TransactionExecutor.java/ClientTransactionHandler.java
- 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
LaunchActivityItem、ResumeActivityItem
都继承BaseClientRequest.java
,基本处理preExecute、execute、postExecute
- 关注
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相关推荐
- 【Monica的android学习之路】四大组件的生命周期
[Monica的android学习之路]四大组件的生命周期 1. Service 1.1 启动service 1.1.1 startService 1.1.2 bindService 1.2 死亡回调 ...
- Android四大基本组件和生命周期的介绍
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.了解四大基本组件 Activity ...
- 【Android 四大组件之Activity】一文吃透Activity 生命周期
作者:半身风雪 简介:在Android组件中最基本也是最为常见的四大组件: Activity Service服务 Content Provider内容提供者 BroadcastReceiver广播接收 ...
- android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]
1 章节目录 2 Android Activity综述 2.1 Activity怎么用 2.2 layout - 界面布局 2.3 Java - 控制界面 2.4 AndroidManifest.xm ...
- activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)
1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...
- Android 插件化原理解析——Activity生命周期管理
之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...
- Activity生命周期 onCreate onResume onStop onPause
Android应用开发提高系列(6)--Activity生命周期 onCreate 和 onResume 在程序启动时候都会启动, 所有有些需要在onCreate onResume中都要实现的功能,之 ...
- 图解:Activity生命周期
当用户需要对手机通过屏幕进行交互时,比如打一个电话,拍张照片,发送一个邮件,或者查看地图.开发者就需要实现一个活动(Activity).每个活动都将作为一个提供用户使用接口的窗口.它可以填满整个屏幕, ...
最新文章
- java定时器结合springboot_SpringBoot开发案例之整合定时任务(Scheduled)
- 【Homework】银行存取款业务
- 图的遍历、最小生成树、最短路径
- FioriLaunchpad.html的三个round-trip
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
- linux bttrack服务,使用Docker安装OpenTracker,自建BT Tracker服务器
- html笔记——网页中视频播放,文字滚动
- Android开发之动态加载,运行未安装apk
- php 什么是 cookie? 会话 cookie 与持久性 cookie 之间 有何区别?
- css设置背景颜色的亮度
- Qt 常用文件对话框及消息对话框使用
- 自制hdmi线一头改vga图_什么是VGA?
- 海尔简爱S15电脑使用U盘来重新安装Win10系统教学
- 如何解决Java查看源代码时页面显示Source not found
- 在云服务器上部署项目(下)
- 软考中级-系统集成项目管理工程师-考试学习计划
- 英语口语练习一之work详解
- java毕业设计——基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码)——堡垒游戏
- 睿码主数据管理平台到底有啥不一样
- ChatGPT之父Sam Altman有多牛?
热门文章
- 一键查询物流,教你查找快递延误件并导出EXCEL表格
- Java程序设计 北京大学 Week3互评作业
- beats android 蓝牙连接电脑,Beats Solo3如何连接电脑 Beats Solo3连电脑方法【介绍】...
- 添加Google网络地图功能
- matlab氢原子杂化轨道,杂化轨道理论(sp3/sp2)
- JB测试之旅-浅谈自动化知识
- 牛客-计算机考研复试上机题-二次方程计算器
- common-lang的StringUtils工具类说明
- [electron 工具] 使用 electron、vue 和 nodejs 做一个网件路由器 SOAP API 测试工具之一 ( 简介 )...
- Unity Render Streaming使用方法,WebRTC的基础搭建使用