
Android系统中的原理分析
文章平均质量分 78
Android系统中的原理分析
小馬佩德罗
业精于勤荒于嬉,行成于思毁于随
展开
-
Android系统四大组件工作过程分析(一)- Activity
声明前阶段对Android系统的启动过程进行了分析:Android系统启动过程分析;现在想对Android程序猿常用的四大组件,包括 Activity、Service、BroadcastReceiver、ContentProvider它们的运行分别进行下分析,因为在平时编写一些Android应用代码时通常直接调用这些组件的API就能轻易实现一些功能,如果想深入了解它们的工作过程就需要对它们进行具体分析了。本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另原创 2021-01-05 10:57:08 · 173 阅读 · 0 评论 -
Android系统四大组件工作过程分析(二)- Service
声明前阶段对Android系统的启动过程进行了分析:Android系统启动过程分析;现在想对Android程序猿常用的四大组件,包括 Activity、Service、BroadcastReceiver、ContentProvider它们的运行分别进行下分析,因为在平时编写一些Android应用代码时通常直接调用这些组件的API就能轻易实现一些功能,如果想深入了解它们的工作过程就需要对它们进行具体分析了。本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另原创 2021-01-05 10:59:58 · 172 阅读 · 0 评论 -
Android系统四大组件工作过程分析(三)- BroadcastReceiver
声明前阶段对Android系统的启动过程进行了分析:Android系统启动过程分析;现在想对Android程序猿常用的四大组件,包括 Activity、Service、BroadcastReceiver、ContentProvider它们的运行分别进行下分析,因为在平时编写一些Android应用代码时通常直接调用这些组件的API就能轻易实现一些功能,如果想深入了解它们的工作过程就需要对它们进行具体分析了。本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另原创 2021-01-05 11:01:23 · 173 阅读 · 0 评论 -
Android系统四大组件工作过程分析(四)- ContentProvider
声明前阶段对Android系统的启动过程进行了分析:Android系统启动过程分析;现在想对Android程序猿常用的四大组件,包括 Activity、Service、BroadcastReceiver、ContentProvider它们的运行分别进行下分析,因为在平时编写一些Android应用代码时通常直接调用这些组件的API就能轻易实现一些功能,如果想深入了解它们的工作过程就需要对它们进行具体分析了。本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另原创 2021-01-05 11:02:07 · 153 阅读 · 0 评论 -
Android系统原理性问题分析 - 消息传递机制的分析(Looper 和 Handler)
概念解释UI线程Activity主线程,系统在创建UI线程的时候会初始化一个Looper对象,同时也会创建一个与其关联的MessageQueue;Handler发送与处理信息,如果希望Handler正常工作,在当前线程中要有一个Looper对象MessageHandler接收与处理的消息对象消息队列,先进先出管理Message,在初始化Looper对象时会创建一个与之关联的MessageQueueLooper。原创 2023-05-10 09:49:04 · 1411 阅读 · 4 评论 -
Android系统原理性问题分析 - Thread类及常用同步类分析
虽然说Android可以直接使用C++的pthread类编程,但Android毕竟需要Java世界,为了更好的和Java交互还是添加Thread类,它构造函数中的那个canCallJava是重点。/*原创 2023-05-11 20:32:36 · 984 阅读 · 0 评论 -
Android系统原理性问题分析 - RefBase、sp、wp 分析
然后还要判断目标对象是不是第一次被引用,其中的c变量得到的是“增加之前的值”,因而如果等于INITIAL_STRONG_VALUE 就说明是第一次(这时候一方面要回调 onFirstRef通过对象自己被引用,另一方面要对 mStrong 值做调整。而增加弱引用时是不会同时增加强引用的,这说明:弱引用的值>=强引用值。引用计数器的出现使得放内存对象不再是个别指针的事情,而是对象自己的“内政”,只要有人在使用它,它就不会轻易 delete 自身,也就有效地避免了引用它的指针突然变成“野指针”的情况。原创 2023-05-14 13:53:13 · 882 阅读 · 0 评论 -
Android系统原理性问题分析 - Android Native程序的结构设计方式
Android 系统默认的实现中,media 守护进程中的MediaPlayerService、CameraService 和AudioFlinger 等类使用的是这种典型的结构,SurfaceFlinger 情况类似,但是默认情况下没有独立运行的守护进程。Android 的本地程序基于 Linux 中标准 C和C++的开发,这部分内容和其他系统的思路相同比较特殊的地方是Android 的本地程序使用 Android 中的通信机制,由此也产生了特殊的程序结构。这与程序的具体实现相关,而和程序通信结构无关。原创 2023-05-16 20:00:00 · 1139 阅读 · 0 评论 -
Android系统原理性问题分析 - Dalvik/ART上的进程与线程
所以线程池线程一共会生成3 个。PoolThread类继承了Thread类,调用的IPCThreadState的joinThreadPool函数,将当前线程注册到Binder驱动程序中,这样创建的线程就加入了Binder线程池中,新创建的应用程序进程就支持Binder进程间通信了,只需要创建当前进程的Binder对象,并将它注册到ServiceManager中就可以实现Binder进程间通信,而不必在意进程间是如何通过Binder通信的。Bionic 的线程机制是 Dalvik/ART 线程的机制的基础。原创 2023-05-16 22:07:47 · 604 阅读 · 0 评论 -
Android系统原理性问题分析 - Android Java框架层的结构
声明在Android系统中经常会遇到一些系统原理性的问题,在此专栏中集中来讨论下。Android系统,为了能够更好的理解Android的Java世界的运行规律,此篇分析Android Java框架的结构。此篇参考一些博客和书籍,代码基于Android 7.1.1,不方便逐一列出,仅供学习、知识分享。1 Java框架层结构Android系统Java 框架层库的实体内容主要有 3个,如下所示:Java 框架库:framework.jarJava 服务库:services.jar资源包:fr原创 2023-05-18 20:00:00 · 853 阅读 · 0 评论 -
Android系统原理性问题分析 - 单路情况下的C/S模型
各个应用程序创建一个 socket。socket 是一个允许通信的“设备”,两个应用程序都需要用到它。服务器将自己的 socket 绑定到一个众所周知的地址(名称)上使得客户端能够定位到它的位置。使用 socket()系统调用能够创建一个 socket,它返回一个用来在后续系统调用中引用该socket 的文件描述符。不管参数protocol,此篇中protocol参数都设置为0,如果对这个参数感兴趣,可以自行搜索学习。主要分析下前两个参数: domain 和 type。原创 2023-05-26 12:09:42 · 851 阅读 · 1 评论 -
Android系统原理性问题分析 - 多路并发情况下的C/S模型
假设有一个将 INET 套接字用作 C/S 模型。如果想让一个Server端与多个 Client端通信,那么每个Server端 和 Client端都需要 INET 套接字。如果多客户端同时连接服务器端,那服务器端如何处理多客户端的服务请求呢?C/S模型通常有三种处理方式:多进程、多线程、I/O 多路复用。原创 2023-05-24 21:50:04 · 843 阅读 · 4 评论 -
Android系统原理性问题分析 - epoll 的事件模型
在Android系统原理性问题分析 - 多路并发情况下的C/S模型中分析了 I/O 多路复用的 epoll 机制,此篇分析下 epoll 的事件模型。Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要有数据都会触发。假定已经把一个用来从管道中读取数据的文件描述符(RFD)添加到 epoll 描述符。管道的另一端写入了 2KB 的数据。原创 2023-06-10 23:10:03 · 989 阅读 · 0 评论 -
Android系统原理性问题分析 - 系统 Root 的实现原理
su 会利用这个 LocalSocket 连接将调用 su 命令的 Android 应用的信息传递给 Superuser.apk,这些信息就是在Root 授权窗口上看到的 APP 的名称的图标。系统原生的 su 对于所有的应用程序是平等的,所以原生的su 是无法保证 su 的安全的,SuperUser 必须安装自定义的 su,以及能够保证自身 su 不被替换的 deamon 进程。以上代码对用户来说是无感知的,所以如果一个 Android 应用利用 su 执行 Linux 命令,用户是不知道的。原创 2023-06-10 11:00:00 · 1133 阅读 · 0 评论 -
Android系统原理性问题分析 - Linux 线程池(Thread Pool)的实现原理
【代码】Android系统原理性问题分析 - Linux 线程池(Thread Pool)的实现原理。原创 2023-06-10 17:00:54 · 161 阅读 · 0 评论