Android框架层源码
文章平均质量分 81
主要分析android框架层的源代码
weiers
逝去了青春至少还留下了代码
展开
-
利用EGL在android上使用C/C++写OpenGL ES程序
使用Native代码GLSurfaceView在Java层使用EGL在native层使用EGL很多教程都是在C/C++写的OpenGL的代码,其中有很多优秀的框架,除了前面提过的Assimp库外,还有很强大的库glm,从另外一个角度来看,在学习EGL的时候,很多的资料都是C语言的代码,我在android上写OpenGL ES的代码似乎从来没见过那些代码,不使用一下总觉得缺少点什么。事实上,An原创 2016-11-30 23:37:30 · 15016 阅读 · 0 评论 -
Android绘制View相关的几个问题
前面关于View绘制的话题好像零散的写过博客,虽然好久没有认真的研究一些东西了,平时忙其他的东西,但是本着每个月必须花几天时间看看android的想法,今天整理了几个View绘制相关的问题,这里不会涉及View测量布局绘制的那部分细节,因为这些前面已经写过了。主要有以下几个问题1.View绘制流程 invalidate/requestLayout2.View树和DecorView4.真原创 2016-06-21 10:50:19 · 4661 阅读 · 0 评论 -
简单说Binder(2)
几个问题接着上一篇的内容,本片博客讨论几个问题1.跨进程传递IBinder对象的情形2.跨进程回调3.分析Toast的显示过程:跨进程回调的例子跨进程传递IBinder对象的情形会不会觉得传递IBinder有点奇怪呀?Binder机制不是用来做进程间通信的吗,那传递IBinder是为了干啥呢?没错,通信可以是双向的呀,Process A和Process B通信,进程A作为客原创 2016-02-23 20:45:23 · 2352 阅读 · 3 评论 -
简单说Binder(1)
Binder算是Android中比较难懂的一部分内容了,但是非常的重要,要想研究Framework层无论如何也绕不开Binder。网上也有很多讲解Binder的文章,有的很深入涉及到底层C层面,理解起来难度较大,要完全理解还需要Linux驱动的知识,看了还也是似懂非懂,我认为也不需要理解那么深入。写这篇博客主要是我从最学习理解Binder的过程的角度出发,也来谈谈Binder。Binder是什原创 2016-02-20 01:29:12 · 7730 阅读 · 12 评论 -
硬盘缓存方案DiskLruCache源码解析
硬盘缓存方案DiskLruCache前面研究了LruCache,它作为现在用的最多的内存缓存方案已经在很多开源缓存框架中使用,同样的还有硬盘缓存方案也就是DiskLruCache。它的大致用法如下存储:DiskLruCache diskLruCache= open(File directory, int appVersion, int valueCount, long maxS原创 2016-02-18 21:00:35 · 5176 阅读 · 0 评论 -
从HashMap到LruCache的源码分析
android的图片加载库Android-Universal-Image-Loader中的缓存策略,内存缓存LruCache,是一个最近最少使用算法LRU。前几天看操作系统也看到了LRU算法,是用在缺页中断发生时,进行置换算法才用的一种。缓存中的LruCache和操作系统中的页置换算法思想是一样的,于是心血来潮,决定把这部分实现看看,然后就有了这篇博客,从HashMap的实现到LinkedHash原创 2016-01-07 00:43:15 · 2938 阅读 · 3 评论 -
异步消息处理机制-Android中Handler原理(续)
异步消息处理线程是指线程启动后会进入一个无限循环,每循环一次,从内部的消息队列里面取出一个消息,并回调相应的消息处理函数。一般在任务常驻,比如用户交互任务的情况下使用异步消息处理线程。之前在Android中Handler原理里面研究过android里实现异步消息处理线程的方式,基本逻辑如图所示 今天就用java将其简单的模拟出来加深印象,下面的类图是用工具导出的,不太正规,不过能大概看出类之间原创 2015-10-22 21:39:46 · 2672 阅读 · 0 评论 -
android之View绘制到窗口上的过程
以前在研究自定义空间的时候,查看过View和ViewGroup绘制的流程的。只是定性的知道会经过onMeasure—onLayout—onDraw这些流程。上一篇Android视图加载到窗口的过程分析中分析了视图加载到窗口的过程。主要就是一系列的addView操作,这篇就从addView方法开始看看View是如何绘制到窗口上的。ActivityThread#handleResumeActi原创 2015-03-30 23:32:27 · 1884 阅读 · 0 评论 -
Android视图加载到窗口的过程分析
上一篇博客Android中Handler原理在讲到Handler的时候谈到了android的Activity启动是如何执行到onCreate方法的,这篇主要从onCreate方法里面我们必须要写的方法setContentView开始,研究布局视图是如何加载到手机窗口上的。当在执行到setContentView时,实际上执行的是public void setContentView(int原创 2015-03-16 12:31:32 · 7504 阅读 · 3 评论 -
Android中Handler原理
Handler主要是主线程和子线程通信。一般子线程中做一些耗时操作做完之后通知主线程来修改UI。实际上android系统在Activity启动或者状态变化等都是通过Handler机制实现的。首先进入到ActivityThread的main方法中public static void main(String[] args) { …… Looper.pre原创 2015-03-14 00:19:42 · 5588 阅读 · 1 评论 -
Android控件捕获点击事件的范围
View的Tween动画过程中点击事件的位置并不会因为动画位置的改变而改变,是因为在动画过程中layout的位置实际上没有变,因此曾经一度认为View的点击事件(其实不仅仅是点击事件,包括所有的触摸事件)触发的范围是该View在layout的时候指定的left,top,right,bottom。今天才发现不完全是这样的。一切都是因为平时看代码没有仔细一点所造成了对问题理解不全面。在这里记录一下原创 2014-12-11 09:37:46 · 6630 阅读 · 4 评论 -
Android的Tween动画的实现框架
在写程序的时候遇到了Tween动画几个问题:1, 执行动画的时候点击事件仍然在动画开始的位置?2, XXXAnimation的构造参数里面的值具体是什么意思?3, 平移动画中fromXValue和toXValue旋转动画中fromDegrees和toDegrees取负值有什么不同??(相信很多人也有疑惑)4, RotateAnimation的int pivotXType, float pivotXValue, int pivotYType, float pivotYValue四个参数是怎么确原创 2014-12-01 11:01:34 · 11617 阅读 · 13 评论 -
Android中图像变换Matrix的原理
第一部分 Matrix的数学原理在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类。Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matrix的对图像的处理可分为四类基本变换:Translate 平移变换Rotate 旋转变换Scale转载 2014-12-01 00:25:47 · 3932 阅读 · 0 评论 -
Android初始化的时候获取加载的布局的宽高(续)--RelativeLayout的陷阱
Android初始化的时候获取加载的布局的宽高(续)--RelativeLayout的陷阱接着上次的问题,已经介绍过,在初始化或者说OnCreate方法中获取加载的布局的宽高,最后说到,调用view.measure(0, 0);然后在调用getMeasuredWidth和getMeasuredHeight就可以获得测量的宽高。可以参考:Android如何在初始化的时候获取加载的布局的宽高今天在写类似的效果时,给ListView加载一个头部视图,通过listView$addHeadView添加到ListV原创 2014-11-28 09:07:57 · 7798 阅读 · 8 评论 -
Android如何在初始化的时候获取加载的布局的宽高
在自定义ListView中,需要将下拉刷新的View在初始化的时候设置padding隐藏起来,这时就要在初始化的时候获得要加载的布局View的高度。 private View headView; headView = inflater.inflate(R.layout.header, null); 如果接下来调用: headView.getHeight(); headView.getMeas...原创 2014-11-26 15:50:37 · 10303 阅读 · 5 评论 -
android View的布局宽高之LayoutInflater函数详解
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" >原创 2014-11-20 18:19:43 · 8642 阅读 · 11 评论 -
Android之View的视图测量过程
View的measure函数public final void measure(int widthMeasureSpec, int heightMeasureSpec) { if ((mPrivateFlags & PFLAG_FORCE_LAYOUT) == PFLAG_FORCE_LAYOUT || widthMeasureSpec != m原创 2014-11-19 22:20:27 · 1710 阅读 · 0 评论