R
RSSOK!
历史文章

码农明明桑

共 122 篇文章
返回首页
Android源码分析:系统进程中事件的读取与分发
之前分析的是从InputChannel中读取Event,并且向后传递,进行消费和处理的过程。但是之前的部分呢,事件如何产生,事件怎么进入到InputChanel当中的,事件又是如何跨进程到达App进程,这里继续来分析。 以上为system进程的流程的简化图,这里我们可以看到几个重要的组件,这里以触摸事件来进行分析(后文的分析也将会以触摸事件为主进行分析)并且简单的描绘了事件从EventHub到服务端的InputChannel发送事件的全部过程。具体内容一起来看下面的代码。 InputManagerService的创建 因为事件的分发涉及到不少类,我们先从InputManagerService(
2024-09-26 13:44
Android源码分析:从源头分析View事件的传递
对于应用开发者的我们来说,经常会处理按钮点击,键盘输入等事件,而我们的处理一般都是在Activity中或者View中去做的。我们在上一篇文章中分析了View和Activity与Window的关系,其中的ViewRootImpl和我们的事件传递息息相关,上文未能分析,本文将对其进行分析。 事件介绍 事件是什么呢,广义上事件的发生可能在软件也可能在硬件层,在Android设备当中,我们会有可能有键盘触发,触摸触发,鼠标触发的各种事件。我们关注的通常有两种事件: 按键事件(KeyEvent): 这种色包括物理的按键,Home键,音量键,也包括软键盘触发的事件。 触摸事件(TouchEvent): 手
2024-09-20 17:20
Android源码分析:Window与Activity与View的关联
Activity是四大组件中和UI相关的那个,应用开发过程中,我们所有的界面基本都需要使用Activity才能去渲染和绘制UI,即使是ReactNative,Flutter这种跨平台的方案,在Android中,也需要一个Activity来承载。但是我们的Activity内我们设置的View又是怎么渲染到屏幕上的呢,这背后又有WindowManager和SurfaceFlinger来进行工作。本文就来看看WindowManger如何管理Window,以及Window如何与Activity产生关系的呢。 Activity与Window的初见 Activity的创建是在ActivityThread的
2024-09-19 21:30
回皖北农村观察随记
老家在皖北农村,一年回不了几次,上次过年回去的,这次中秋想着回家看看老爹,就回去看了看。正好也记录一下回去的所看所感。 人 中秋节的节味是越来越淡了,因为大部分的人都在外打工,现在这个节点跟过年比农村依然很冷清。但是跟平时比还人还要多一点点,因为有些住在县城的人,中秋这天还跑回来过节了。 现在大部分人家里的地都承包出去了,还能干活的人都出去打工了。留下来的只剩老弱病,以及带着小孩上学的部分发家庭。 农村的教育 我们村里的小学已经关闭好多年了,附近几个村的基本也都关的差不多了。我以前上的镇子上的初中,以前人多的时候一个年级差不多上千人,现在在那边上学的小妹说,一个年级也就200多人。我想原因是有
2024-09-18 22:05
Android源码分析:Activity启动流程Task相关分析
Activity的启动分析,很大一块需要了解的是Activity的Task管理,以及启动过程中Task的决策,在之前分析启动流程中,关于Task处理的部分,我这里是简化掉了很多的,今天再来分析一下。 入口与计算启动参数 在之前分析Activity的启动中,已经看到了关于处理Task的代码是在ActivityStart当中的startActivityInner方法当中,这个方法有不少入参,先捋一遍: resultTo为调用的Activity的mToken(IBinder) ActivityRecord r, //新创建的Record,包含calling信息和要打开的ActivityInfo等 A
2024-09-13 17:57
Android源码分析:Activity启动流程分析
Activity是Android中四大组件使用最多的一种,不准确的说,一个Activity就是一个独立页面的承载,因此看Android系统的源码,Activity的启动也是必须要去阅读的。今天的文章就来介绍Activity的启动。因为之前的文章已经分析了ClientTransaction,因此我们对于AMS调用Activity的生命周期和启动有所了解。并且我们也已经分析过了Binder,对于跨进程通讯我们也比较清楚了,不需要细看。我们也分析了应用进程的启动,我们分析Activity启动过程,就不需要去关注应用进程的启动了。有了这些基础,分析Activity的启动会容易一点点。 发起启动Acti
2024-09-11 22:20
Android源码分析: 应用进程启动分析
Android应用进程的启动,简单来说就是从zygot进程fork出来一个新进程,并对其进行一些初始化。这样做系统的一些代码和资源等等就不需要重复加载,一些环境变量也都不需要重新设置,可以说是很巧妙的设置。下面就来具体分析一下其初始化过程。 启动时机 应用进程的启动,一般是在创建四大组件,比如说启动Activity,Service,使用ContentProvider,有广播需要处理,这些情况需要创建进程。在我们分析的代码当中,除了这几种情况,BackupAngent也会涉及到创建App进程。 启动进程调用的为AMS当中的startProcessLocked方法, 我们注意看的话,AMS当中还有
2024-09-09 20:11
Android Binder源码分析:AIDL及匿名服务传输
前面介绍的通过ServiceManager添加服务和获取服务,这些服务都是有名称的,我们可以通过ServiceManager来获取它。除此之外Android系统中还有一类Binder服务是匿名它,它们如何让客户端获得代理对象,并且使用呢,本文就一探究竟。 AIDL 介绍 AIDL全称为Android接口定义语言,是Android系统提供的一款可供用户用来抽象IPC的工具,它提供了语法让我们来定义跨进程通讯的服务接口,也就是.aidl文件,它也提供了工具,帮助我们把定义文件专程目标语言的代码。 我们自己使用AIDL创建的服务,或者一部分系统内的服务,比如IWindowSession、IAppli
2024-09-07 17:57
Android Binder源码分析:添加服务和获取服务解析
通过ServiceManager添加服务和获取服务分别为addService和getService,两者流程上其实是有一些类似的,其中我们可以看到binder通讯的全过程。为了让内容更有意义,添加服务选择从Java层的代码触发,获取服务则选择从Native层触发。 添加服务 我们以添加ActivityManagerService为例分析添加一个Service。首先先画个简单的流程图,介绍涉及到的类和调用的方法,不过步骤进行了省略,详细看后面的代码解析。 ServiceManagerProxy请求添加Service 其代码在ActivityManagerService的setSystemProc
2024-09-06 19:22
Android源码分析:ServiceManager启动代码解析
之前已经分析过获取ServiceManager了,不过那是在使用端,在分析使用ServiceManager去获取服务或者添加服务的时候发现,我使用的Android Studio for Platform默认没有把ServiceManager的源码导入。并且同时我们不知道ServiceManager的服务端是怎么启动,怎么响应的,因此决定还是需要分析一下这块的代码。 首先简单画了一下启动的流程,如下图所示(Entry表示我们的调用入口,也就是后面所说的main函数): sequenceDiagram autonumber Entry->>+ProcessState: initWithDriver
2024-09-05 20:41
1 … 4 5 6 7 8 … 13