当前位置:首页 » 安卓系统 » android成员变量

android成员变量

发布时间: 2023-10-09 08:09:14

‘壹’ Android之Binder通信篇

Binder跨进程通信的本质是依赖内核驱动将属于不同Binder进程的数据,从原始进程复制到目标进程,这样就完成了跨进程通信了。

Binder通过独特的内存映射机制,在跨进程通信时,可以做到一次拷贝,两个空间同时使用!如下图:

Binder跨进程通信是要传递数据的,既然有数据必然要占用内存空间,Android系统规定每一个进程都有一块Binder内存区,也就是图1中的 共享内存 ,系统最多只能给该区域分配4M的物理内存,由于申请这块内存是通过系统的mmap函数完成的,所以整个映射机制又被称为mmap机制
为了把这部分说明白,就再盗图一张,命名图2吧!

对于Binder驱动,通过 binder_procs 链表记录所有创建的 binder_proc 结构体,binder 驱动层的每一个 binder_proc 结构体都与用户空间的一个用于 binder 通信的进程一一对应,且每个进程有且只有一个 ProcessState 对象,这是通过单例模式来保证的。在每个进程中可以有很多个线程,每个线程对应一个 IPCThreadState 对象,IPCThreadState 对象也是单例模式,即一个线程对应一个 IPCThreadState 对象,在 Binder 驱动层也有与之相对应的结构,那就是 Binder_thread 结构体。在 binder_proc 结构体中通过成员变量 rb_root threads,来记录当前进程内所有的 binder_thread。

Binder 线程池:每个 Server 进程在启动时创建一个 binder 线程池,并向其中注册一个 Binder 线程;之后 Server 进程也可以向 binder 线程池注册新的线程,或者 Binder 驱动在探测到没有空闲 binder 线程时主动向 Server 进程注册新的的 binder 线程。对于一个 Server 进程有一个最大 Binder 线程数限制,默认为16个 binder 线程,例如 Android 的 system_server 进程就存在16个线程。对于所有 Client 端进程的 binder 请求都是交由 Server 端进程的 binder 线程来处理的。

‘贰’ 09 Android包管理机制-综述

PackageManagerService(简称PKMS),是Android系统中核心服务之一,管理着所有跟package相关的工作,常见的比如安装、卸载应用。 PKMS服务也是通过binder进行通信,IPackageManager.aidl由工具转换后自动生成binder的服务端IPackageManager.Stub和客户端IPackageManager.Stub.Proxy,具体关系如图:

Android系统启动过祥液程中,一路启动到SystemServer后,便可以启动framework的各大服务,本文将介绍PKMS的启动过程

PKMS职责

PackageParser定了相当多的内部类,这些内部类的作用就是保存对应的信息。解析AndroidManifest.xml文件得到的信息由Package保存。从该类的成员变量可看出,和Android四大组件相关的信息分别由activites、receivers、providers、services保存。由于一个APK可凯宴则声明多个组件,因此activites和receivers等均声明为ArrayList

Android系统有很多目录可以存放app,如下所示:

AIDL (Android Interface Definition Language), Android接口定义语言,Android提盯棚供的IPC (Inter Process Communication,进程间通信)的一种独特实现。 这个阶段处理.aidl文件,生成对应的java接口文件。

通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件。

通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex。

将classes.dex、resources.arsc、res文件夹(res/raw资源被原装不动地打包进APK之外,其它的资源都会被编译或者处理)、Other Resources(assets文件夹)、AndroidManifest.xml打包成apk文件。 注意: res/raw和assets的相同点:

对apk进行签名,可以进行Debug和Release 签名。

release mode 下使用 aipalign进行align,即对签名后的apk进行对齐处理。 Zipalign是一个android平台上整理APK文件的工具,它对apk中未压缩的数据进行4字节对齐,对齐后就可以使用mmap函数读取文件,可以像读取内存一样对普通文件进行操作。如果没有4字节对齐,就必须显式的读取,这样比较缓慢并且会耗费额外的内存。 在 Android SDK 中包含一个名为 “zipalign” 的工具,它能够对打包后的 app 进行优化。 其位于 SDK 的 build-tools 目录下, 例如: D:DevelopAndroidsdkuild-tools23.0.2zipalign.exe

·

热点内容
官方版我的世界登录网易服务器 发布:2024-11-30 14:38:37 浏览:112
安卓手机没电会出现什么问题 发布:2024-11-30 14:37:31 浏览:983
unity3d加密dll 发布:2024-11-30 14:36:40 浏览:25
苹果手机在哪里可以置换安卓 发布:2024-11-30 14:36:34 浏览:468
php函数参数的传递参数 发布:2024-11-30 14:32:00 浏览:504
安卓手机怎么联系汽车 发布:2024-11-30 14:12:00 浏览:648
python代码性能 发布:2024-11-30 14:11:57 浏览:678
php变量是否存在 发布:2024-11-30 13:53:00 浏览:954
数组下标过大编译错误吗 发布:2024-11-30 13:52:51 浏览:639
检测5g信号密码是多少 发布:2024-11-30 13:52:51 浏览:258