Android源码解析
文章平均质量分 96
本专栏的目的是对Android源码以及一些常用的Android开源库进行解析,让开发者更深入了解Android工作原理
孙群
关注前端HTML5,关注地理数据可视化,热爱移动互联网,爱开源,爱分享!
展开
-
Android源码解析Activity#setContentView()方法
在Activity初始化的过程中,会调用Activity的attach方法,在该方法中会创建一个PhoneWindow的实例,将其作为Activity的mWindow成员变量。在执行完了Activity#attach()方法之后,会执行Activity#onCreate()方法。我们在Activity#onCreate()方法中会就调用setContentView()方法,我们将一个Layout的资原创 2016-07-27 11:13:43 · 9242 阅读 · 6 评论 -
源码解析ListView中的RecycleBin机制
在自定义Adapter时,我们常常会重写Adapter的getView方法,该方法的签名如下所示:public abstract View getView (int position, View convertView, ViewGroup parent) 此处会传入一个convertView变量,它的值有可能是null,也有可能不是null,如果不为null,我们就可以复用该convertView原创 2016-04-05 23:38:57 · 19420 阅读 · 18 评论 -
使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
Adapter相当于一个数据源,可以给AdapterView提供数据,并根据数据创建对应的UI,可以通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作为数据源。常见的AdapterView的子类有ListView、GridView、Spinner和ExpandableListView等。本文就以ListView为例讲解各种常见的Adapter的使用。原创 2016-03-06 00:22:19 · 23678 阅读 · 13 评论 -
源码解析Android中AsyncTask的工作原理
在之前的博客《Android中AsyncTask使用详解》中我们提到AsyncTask是对Thread和Handler的组合包装,本文将通过解析的方式让大家了解AsyncTask的工作原理。AsyncTask的源码链接https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/AsyncTa原创 2016-02-17 23:03:36 · 17243 阅读 · 16 评论 -
源码解析Android中View的layout布局过程
Android中的Veiw从内存中到呈现在UI界面上需要依次经历三个阶段:量算 -> 布局 -> 绘图,关于View的量算、布局、绘图的总体机制可参见博文 《 Android中View的布局及绘图机制》。量算是布局的基础,如果想了解量算的细节,可参见博文《源码解析Android中View的measure量算过程》。本文将从源码角度解析View的布局layout过程,本文会详细介绍View布局过程中的原创 2015-12-20 23:10:11 · 13586 阅读 · 9 评论 -
Android中TouchEvent触摸事件机制
当我们的手指在Android屏幕上点击或滑动时,就会触发触摸事件TouchEvent。在App中ViewGroup和View存在多级嵌套,在最外层的是Activity,最内层的View,介于Activity与View之间的是一些ViewGroup。本文为了简化讨论,我们假设一个Activity中只有一个ViewGroup,这个ViewGroup中只有一个View。当我们用手指触摸到View的UI时,原创 2015-12-20 16:28:52 · 21097 阅读 · 6 评论 -
源码解析Android中View的measure量算过程
View的measure方法还是比较聪明的,知道如何偷懒利用以前量算过的数据,如果情况有变,那么就调用onMeasure方法进行实际的量算工作,在onMeasure中,View要根据父ViewGroup给其传递进来的widthMeasureSpec和heightMeasureSpec,并结合View自身想要的尺寸,综合考虑,计算出最终的量算的宽度和高度,并存储到相应的成员变量中,这才标志着该View量算有效的完成了,原创 2015-10-25 14:08:54 · 13184 阅读 · 21 评论 -
Android中View的量算、布局及绘图机制
1. Android自上而下对所有View进行量算,这样Android就知道了每个View想要的尺寸大小,即宽高信息2. 在完成了对所有View的量算工作后,Android会自上而下对所有View进行布局,Android就知道了每个View在其父控件中的位置,即View到其父控件四边的left、right、top、bottom3. 在完成了对所有View的布局工作后,Android会自上而下对所有View进行原创 2015-10-17 14:42:04 · 15952 阅读 · 12 评论 -
深入源码解析Android中Loader、AsyncTaskLoader、CursorLoader、LoaderManager
如果对Loader、AsyncTaskLoader、CursorLoader、LoaderManager等概念不明白或不知道如何使用Loader机制,可参见博文Android中Loader及LoaderManager的使用(附源码下载)。本文主要通过研究Loader及其子类的生命周期的方式来对Loader及其子类、LoaderManager的源码进行研究。Loader是靠LoaderManager管原创 2015-10-08 00:01:34 · 7793 阅读 · 7 评论 -
Android中IntentService的使用及其源码解析
为什么我们需要IntentService ?Android中的IntentService是继承自Service类的,在我们讨论IntentService之前,我们先想一下Service的特点: Service的回调方法(onCreate、onStartCommand、onBind、onDestroy)都是运行在主线程中的。当我们通过startService启动Service之后,我们就需要在Serv原创 2015-08-28 08:41:37 · 5278 阅读 · 1 评论 -
Android中Looper的quit方法和quitSafely方法
Looper是通过调用loop方法驱动着消息循环的进行: 从MessageQueue中阻塞式地取出一个消息,然后让Handler处理该消息,周而复始,loop方法是个死循环方法。那如何终止消息循环呢?我们可以调用Looper的quit方法或quitSafely方法,二者稍有不同。 Looper的quit方法源码如下:public void quit() { mQueue.quit(fals原创 2015-08-13 22:02:13 · 24934 阅读 · 0 评论 -
Android中HandlerThread的使用及源码解析
HandlerThread类可以很方便地创建一个带有looper的新线程。该looper可以被用来创建hanlder对象。需要注意的是start方法必须要调用。HandlerThread使用起来之所以感觉方便,是因为HandlerThread这个类在run方法内部对Looper做了一些工作(调用Looper.prepare()和Looper.loop()方法),这样我们开发者在使用的时候就不需要太多的与Looper打原创 2015-08-06 17:36:37 · 7085 阅读 · 3 评论 -
深入源码解析Android中的Handler,Message,MessageQueue,Looper
本文主要是对Handler和消息循环的实现原理进行源码分析,通过分析源码的方式去探索Thread、MessageQueue、Looper、Message以及Handler的实现原理,并最终通过一张图的形式将它们之间的关系展示出来。原创 2015-08-01 02:20:53 · 31145 阅读 · 55 评论