Activity的onCreate方法是怎样被调用的?

news2024/11/23 12:14:08

Activity的onCreate方法是怎样被调用的?

按前面源码分析的介绍,在ActivityonCreate方法中,添加如下的log:

android.util.Log.i("wztest", "Activity onCreate", new Exception());

重新编译后,启动联系人的一个页面,过滤log,有如下的输出:

05-24 21:06:43.034  2159  2159 I wztest  : Activity onCreate
05-24 21:06:43.034  2159  2159 I wztest  : java.lang.Exception
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.Activity.onCreate(Activity.java:990)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:290)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
05-24 21:06:43.034  2159  2159 I wztest  : 	at com.android.contacts.activities.AppCompatTransactionSafeActivity.onCreate(AppCompatTransactionSafeActivity.java:33)
05-24 21:06:43.034  2159  2159 I wztest  : 	at com.android.contacts.AppCompatContactsActivity.onCreate(AppCompatContactsActivity.java:81)
05-24 21:06:43.034  2159  2159 I wztest  : 	at com.android.contacts.activities.PeopleActivity.onCreate(PeopleActivity.java:352)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.Activity.performCreate(Activity.java:7000)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.Activity.performCreate(Activity.java:6991)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.ActivityThread.-wrap11(Unknown Source:0)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.os.Handler.dispatchMessage(Handler.java:106)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.os.Looper.loop(Looper.java:164)
05-24 21:06:43.034  2159  2159 I wztest  : 	at android.app.ActivityThread.main(ActivityThread.java:6494)
05-24 21:06:43.034  2159  2159 I wztest  : 	at java.lang.reflect.Method.invoke(Native Method)
05-24 21:06:43.034  2159  2159 I wztest  : 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
05-24 21:06:43.034  2159  2159 I wztest  : 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

ActivityThreadhandleLaunchActivity方法是如何被调用的?
通过搜索可知,由ApplicationThreadscheduleLaunchActivity方法调用

ApplicationThread类定义如下,说明是其它进程跨进程调用过来的

private class ApplicationThread extends IApplicationThread.Stub

然后在,ApplicationThreadscheduleLaunchActivity方法中添加一个log

android.util.Log.i("wztest", "ApplicationThread scheduleLaunchActivity", new Exception());

此时log输出如下:
在这里插入图片描述
可知是通过binder远程调用过来的,其实就是system_server调用过来的

ApplicationThreadscheduleLaunchActivity方法如何被调用?
在源码中搜索,或者通过命令行来搜索

 grep "\.scheduleLaunchActivity" ./ -rn
-r 在多级目录中对文本进行递归搜索
-n 输出包含匹配字符串的行

搜索
可知和ActivityStackSupervisor类相关
ActivityStackSupervisorrealStartActivityLocked方法,添加log

android.util.Log.i("wztest", "ActivityStackSupervisor realStartActivityLocked", new Exception());

log输出如下:
realStartActivityLocked

05-24 22:08:05.203  1547  1678 I wztest  : ActivityStackSupervisor realStartActivityLocked
05-24 22:08:05.203  1547  1678 I wztest  : java.lang.Exception
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1315)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1580)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2726)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2255)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2094)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1486)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1413)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7441)
05-24 22:08:05.203  1547  1678 I wztest  : 	at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
05-24 22:08:05.203  1547  1678 I wztest  : 	at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2919)
05-24 22:08:05.203  1547  1678 I wztest  : 	at android.os.Binder.execTransact(Binder.java:697)
05-24 22:08:05.207  2167  2181 I wztest  : ApplicationThread scheduleLaunchActivity
05-24 22:08:05.207  2167  2181 I wztest  : java.lang.Exception
05-24 22:08:05.207  2167  2181 I wztest  : 	at android.app.ActivityThread$ApplicationThread.scheduleLaunchActivity(ActivityThread.java:788)
05-24 22:08:05.207  2167  2181 I wztest  : 	at android.app.IApplicationThread$Stub.onTransact(IApplicationThread.java:196)
05-24 22:08:05.207  2167  2181 I wztest  : 	at android.os.Binder.execTransact(Binder.java:697)
05-24 22:08:05.268  2167  2167 I wztest  : Activity onCreate
05-24 22:08:05.268  2167  2167 I wztest  : java.lang.Exception
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.Activity.onCreate(Activity.java:990)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:290)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
05-24 22:08:05.268  2167  2167 I wztest  : 	at com.android.contacts.activities.AppCompatTransactionSafeActivity.onCreate(AppCompatTransactionSafeActivity.java:33)
05-24 22:08:05.268  2167  2167 I wztest  : 	at com.android.contacts.AppCompatContactsActivity.onCreate(AppCompatContactsActivity.java:81)
05-24 22:08:05.268  2167  2167 I wztest  : 	at com.android.contacts.activities.PeopleActivity.onCreate(PeopleActivity.java:352)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.Activity.performCreate(Activity.java:7000)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.Activity.performCreate(Activity.java:6991)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2732)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2857)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.ActivityThread.-wrap11(Unknown Source:0)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1590)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.os.Handler.dispatchMessage(Handler.java:106)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.os.Looper.loop(Looper.java:164)
05-24 22:08:05.268  2167  2167 I wztest  : 	at android.app.ActivityThread.main(ActivityThread.java:6495)
05-24 22:08:05.268  2167  2167 I wztest  : 	at java.lang.reflect.Method.invoke(Native Method)
05-24 22:08:05.268  2167  2167 I wztest  : 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
05-24 22:08:05.268  2167  2167 I wztest  : 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

综合参考以上信息和《Android进阶解密》中相关内容,ActivityonCreate方法被调用的过程,可总结为如下的形式:

onCreate方法是怎样被调用的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动云COCA架构,重新定义下一代云

当前,算力已经成为 全球科技竞争的焦点 为此,移动云重磅发布 「移动云COCA(Compute on chip Architecture)软硬一体片上计算架构」 以下简称移动云COCA架构 以此打造国家级自主可控的 高性能算力底座 带动国产化智算产业成熟…

10款实用高效的网页版PS插件推荐!

PS是设计界适用范围广、应用次数多的基础性设计工具,PS的功能之强大,常常令新手望而却步。其实,为了对PS的功能进行补充和优化,这些年来陆续开发出了许许多多的功能性PS插件,在网页版 PS ——即时设计上有很多PS插件使…

如何利用AI学习区块链知识,ChatGPT x Kapa.ai ⇒ 开发者的福音

由OpenAI推出的人工智能聊天机器人ChatGPT在各大平台掀起了一阵狂热之风。发布仅四个月的时间,获得超一亿用户,成长速度远高于现今网络应用巨头脸书和Amazon。随着最新版本GPT-4的正式上线,其AI性能和完善程度再度提升,深受用户和…

PMP考试都是什么题?

PMP新版大纲加入了ACP敏捷管理的内容,说是敏捷混合题型占到了 50%,但是这次318的考试,敏捷题占了大半,都说敏捷和情景快要占到80%-90%。 所以有友友说开了四个小时盲盒,题目读不懂,或者觉得4个选项都不对或…

深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用场景、改进技巧等详细讲解

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

xxs跨站之原理分类及攻击手法(25)

xss跨站达到原理&#xff0c;危害和特点 他和语言没有太大关系&#xff0c;它大部分都是属于一个前端的漏洞&#xff0c;搭建一个简易的php网站存在xss跨站漏洞 访问这个网站&#xff0c;x1&#xff0c;就输出1&#xff0c; 如果我们把x<script>alert(1)</script&g…

图解LeetCode——24. 两两交换链表中的节点

一、题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 二、示例 2.1> 示例 1&#xff1a; 【输入】head [1,2,3,4] 【…

Linux——gdb调试器

目录 前言&#xff1a; 二.gdb定义及指令&#xff1a; 如何查看该exe文件是否为Debug版本?两种方法: 三.gdb调试&#xff1a; 调试指令1&#xff1a;l指令(小写L) run指令&#xff1a;运行程序&#xff0c;相当于VS中的直接运行不调试——可简化输入r break指令&#xff1…

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算) 目录 时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)预测效果基本介绍模型描述程序设计参考资料预测效果

基于yolov5全系列模型【n/s/m/l/x】开发构建汉字检测识别系统,调整图像尺寸分别对别416x416和640x640不同分辨率下的性能结果

汉字检测对我来说不是什么新鲜的内容了&#xff0c;因为早在之前的时候就已经有开发过相关的项目了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于轻量级YOLOv5开发构建汉字检测识别分析系统》 《基于轻量级目标检测模型实现手写汉字检测识别计数》 《超轻…

港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为

港股市场新一轮改革举措渐次落地。特别是港交所推出特专科技公司上市机制&#xff0c;吸引符合资格的科技企业申请赴港上市&#xff0c;成为这一轮港股市场改革的“重头戏”。 作为香港资本市场的重要参与者&#xff0c;内资券商立足香港、背靠内地、辐射全球&#xff0c;走出一…

万国数据财报:股价暴跌51%,盈利能力下滑,万国数据前景黯淡

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 收入增长前景 万国数据&#xff08;GDS&#xff09;在3月中旬发布2022财年财务业绩时&#xff0c;为该公司提供了2023财年全年的收入指引。考虑到市场对万国数据的预期和其股价历史表现&#xff0c;猛兽财经认为&#xff0…

【zmq】ZeroMQ安装与入门案例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ZeroMQ的使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

java原生LinkedList详解

java原生LinkedList详解 实际上在IDEA,JDK环境下的LinkList底层就是一个双向链表&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独的节点中&#xff0c;然后通过引用将节点连接起来了&#xff0c;因此在在任意位置插入或者删除元素时&#xff0c;…

DMA控制两路DAC同时输出指定波形

0. 实验目标 使用 DMA 控制 DAC1 和 DAC2 同时输出不一样的波形&#xff0c;实验平台STM32F407ZG 1. 原理部分 1.1 DMA DMA 全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输&#xff0c;也没有中断处理方式那样保…

mycat2主从配置实现读写分离

mycat2主从配置实现读写分离 在https://blog.csdn.net/zhangxue_wei/article/details/130840504基础上继续搭建 1.创建mycat数据源&#xff0c;可以在navcat里直接执行 1.1读数据源m1 /* mycat:createDataSource{"dbType":"mysql","idleTimeout&qu…

Cisco Secure Web Appliance Virtual 15.0 发布 - 适用于网络安全的思科高级威胁防护

Cisco Secure Web Appliance Virtual, AsyncOS for WSA 15.0.0 LD 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-secure-web-appliance-15/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Cisco Secure Web Appli…

Windows Server 2022 中文版、英文版下载 (updated May 2023)

Windows Server 2022 中文版、英文版下载 (updated May 2023) Windows Server 2022 正式版&#xff0c;2023 年 5 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&a…

西南交通大学智能监测 培训课程练习1

2023.05.24培训 task1&#xff1a;ER的用法、对应数据库的设计 task2&#xff1a;熟悉数据库基本操作、使用Navicat 目录 一、E-R图是什么 二、E-R图的组成要素 三、E-R图绘制 四、E-R图实例 4.1E-R图转换到关系模式 4.2具体数据表设计 五、Mysql基础操作 5.1操作数据库…

燃料电池系统控制技术的演进

背景 随着环保意识的不断提高&#xff0c;对清洁能源的需求也日益增加。燃料电池作为一种高效、低污染的清洁能源&#xff0c;受到了广泛关注和重视。与传统燃烧发电相比&#xff0c;燃料电池具有高效、无污染、静音等优点&#xff0c;可以成为未来清洁能源的主要来源之一。 …