Android Frameworks研究
文章平均质量分 94
Android Frameworks研究
悠然红茶
以自己的视角解读code。
展开
-
AsyncTask研究(以Android 10.0为准)
1. AsyncTask概述在Android平台上,要执行异步工作时,我们常常会用到AsyncTask。这个类可以算是历史悠久,早在Android 1.5版时,它就存在了。AsyncTask的使用方法比较简单,无非是创建一个AsyncTask派生类对象,重写其doInBackground()函数,然后在合适时机调用这个对象的execute()或executeOnExecutor()函数即可。下面是一段简单的示例代码:private static class MyTask extends Asy原创 2021-05-25 17:18:07 · 887 阅读 · 10 评论 -
说说AsyncTask演化历程里的小纠结
笔者以前写过一篇文章《AsyncTask研究》,阐述了android框架中AsyncTask的实现原理。当时是基于Android 7.0的代码来分析的,后来就没有再跟进AsyncTask的变化了。最近基于Android 10的代码,又看了一下AsyncTask,发现其实现变动了一点点,那么我们不妨重新串一下这几年不同Android版本里AsyncTask的变动,看看会有什么有趣的东西。 当然,AsyncTask的基本原理是没什么本质变化的,大家如有兴趣,可自行参考《AsyncTask研...原创 2020-11-28 00:52:15 · 504 阅读 · 0 评论 -
说说Android应用的persistent属性
在Android系统中,有一种永久性应用。它们对应的AndroidManifest.xml文件里,会将persistent属性设为true。原创 2015-01-02 10:50:13 · 5618 阅读 · 6 评论 -
品茗论道说广播(Broadcast内部机制讲解)(下)
我们在编写Android程序时,常常会用到广播(Broadcast)机制。从易用性的角度来说,使用广播是非常简单的。不过,这个不是本文关心的重点,我们希望探索得再深入一点儿。我想,许多人也不想仅仅停留在使用广播的阶段,而是希望了解一些广播机制的内部机理。如果是这样的话,请容我斟一杯红茶,慢慢道来。原创 2015-01-01 21:40:28 · 3967 阅读 · 5 评论 -
品茗论道说广播(Broadcast内部机制讲解)(上)
我们在编写Android程序时,常常会用到广播(Broadcast)机制。从易用性的角度来说,使用广播是非常简单的。不过,这个不是本文关心的重点,我们希望探索得再深入一点儿。我想,许多人也不想仅仅停留在使用广播的阶段,而是希望了解一些广播机制的内部机理。如果是这样的话,请容我斟一杯红茶,慢慢道来。原创 2015-01-01 21:31:55 · 3088 阅读 · 3 评论 -
说说PendingIntent的内部机制
在Android中,我们常常使用PendingIntent来表达一种“留待日后处理”的意思。从这个角度来说,PendingIntent可以被理解为一种特殊的异步处理机制。不过,单就命名而言,PendingIntent其实具有一定误导性,因为它既不继承于Intent,也不包含Intent,它的核心可以粗略地汇总成四个字——“异步激发”。原创 2015-01-01 16:36:46 · 2718 阅读 · 2 评论 -
红茶一杯话Binder(传输机制篇_下)
红茶一杯话Binder(传输机制篇_下) 侯 亮 1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头。另一方面,当IPCThreadSt原创 2013-12-01 19:31:13 · 3620 阅读 · 7 评论 -
红茶一杯话Binder(传输机制篇_中)
红茶一杯话Binder(传输机制篇_中) 侯 亮 1 谈谈底层IPC机制吧 在上一篇文章的最后,我们说到BpBinder将数据发到了Binder驱动。然而在驱动层,这部分数据又是如何传递到BBinder一侧的呢?这里面到底藏着什么猫腻?另外,上一篇文章虽然阐述了4棵红黑树,但是并未说明红黑树的节点到底是怎么产生的。现在,我们试着回答这些原创 2013-12-01 19:29:30 · 5099 阅读 · 3 评论 -
红茶一杯话Binder(传输机制篇_上)
红茶一杯话Binder(传输机制篇_上) 侯 亮 1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗?要回答这个问题,我们只能静下心来研究binder驱动的代码。在本系列文档的初始篇中,我们曾经介绍过ProcessState,这个结构是属于原创 2013-12-01 19:27:49 · 4186 阅读 · 1 评论 -
红茶一杯话Binder(ServiceManager篇)
红茶一杯话Binder(ServiceManager篇)侯亮 1.先说一个大概 Android平台的一个基本设计理念是构造一个相对平坦的功能集合,这些功能可能会身处于不同的进程中,然而却可以高效地整合到一起,实现不同的用户需求。这就必须打破过去各个孤立App所形成的天然藩篱。为此,Android提供了Binder机制。原创 2013-12-01 19:25:47 · 4724 阅读 · 4 评论 -
红茶一杯话Binder(初始篇)
红茶一杯话Binder(初始篇)侯 亮1 什么是Binder? 简单地说,Binder是Android平台上的一种跨进程交互技术。该技术最早并不是由Google公司提出的,它的前身是Be Inc公司开发的OpenBinder,而且在Palm中也有应用。后来OpenBinder的作者Dianne Hackborn加入了Google公司,并负责Android原创 2013-12-01 19:23:07 · 9724 阅读 · 7 评论 -
AlarmManager研究
AlarmManager研究侯 亮 1.概述 在Android系统中,闹钟和唤醒功能都是由Alarm Manager Service控制并管理的。我们所熟悉的RTC闹钟以及定时器都和它有莫大的关系。为了便于称呼,我常常也把这个service简称为ALMS。 另外,ALMS还提供了一个AlarmManager辅助类。在实际的代码原创 2013-12-01 19:17:16 · 14307 阅读 · 16 评论 -
聊一聊Android的消息机制
从技术实现上来说,消息机制还是比较简单的。从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的。 本文将基于Android 4.4代码,为大家剖析一下Android的消息机制。原创 2015-09-13 16:19:10 · 2358 阅读 · 0 评论 -
Android4.4的zygote进程(下)
3.2.4启动Android系统服务——startSystemServer()接下来就是启动Android的重头戏了,此时ZygoteInit的main()函数会调用startSystemServer(),该函数用于启动整个Android系统的系统服务。其大体做法是先fork一个子进程,然后在子进程中做一些初始化动作,继而执行SystemServer类的main()静态函数。需要注意的是,原创 2015-09-13 13:51:20 · 2915 阅读 · 0 评论 -
Android4.4的zygote进程(上)
前些天为了在科室做培训,我基于Android 4.4重新整理了一份关于zygote的文档。从技术的角度看,这几年zygote并没有出现什么大的变化,所以如果有人以前研究过zygote,应该不会对本文写的内容感到陌生。 本篇文章和我的上一篇文章《Android4.4的init进程》可以算是姊妹篇啦。读完这两篇文章,我相信大家对Android的启动流程能有一些大面上的认识了。原创 2015-09-13 11:15:19 · 1609 阅读 · 0 评论 -
Android4.4的init进程
前些日子需要在科室内做关于Android系统启动流程的培训。为此,我在几年前的技术手记的基础上,重新改了一份培训文档。在重新整理文档期间,我也重读了一下Android 4.4的相关代码,发现还有一些东西是我以前一直没重视过的,所以打算写下来总结一二。原创 2015-09-12 13:35:04 · 1586 阅读 · 2 评论 -
深入讲解Android Property机制
本文以Android 4.4为准,深入讲解Android Property机制的运作机理。原创 2015-09-11 21:27:33 · 3582 阅读 · 2 评论 -
MediaScannerService研究
MediaScannerService是Android平台提供的一个用于扫描手机中多媒体文件的应用级service。它并不是系统服务。MediaScannerService和MediaProvider有着非常紧密的关系,因为扫描出的结果总需要存储到某个地方来展现给用户。那么它们具体是如何结合的呢?本文将逐步加以阐述。原创 2016-11-16 21:34:06 · 3532 阅读 · 0 评论 -
详细剖析IntentService的运作机理
在讲述Service机制的文章里,我们曾经稍微提起过IntentService,今天再来详细剖析一下它。说起来,IntentService只是一个处理异步请求的服务基类而已。当人们通过调用startService()启动IntentService时,实质上是向其发送了一个请求。而如果有多个地方同时向同一个IntentService发送请求的话,那么这些请求会被串行化处理。所以,IntentService常常用于执行那种“一次性处理”的工作。原创 2016-11-07 21:53:45 · 1539 阅读 · 0 评论 -
Android Service演义
在Android平台上,那种持续性工作一般都是由service来执行的。不少初学者总是搞不清service和线程、进程之间的关系,这当然会影响到他们开展具体的开发工作。其实,简单说起来,service和线程、进程是没什么关系的。我们知道,在Android平台上已经大幅度地弱化了进程的概念,取而代之的是一个个有意义的逻辑实体,比如activity、service等。Service实体必然要寄身到某个进程里才行,它也可以再启动几个线程来帮它干活儿。但是,说到底service只是一个逻辑实体、一个运行期上下文原创 2016-11-06 15:15:52 · 1198 阅读 · 2 评论