随笔分类 - Android源码分析系列
分析下Android开发中接触到的一些常见类,力争做明明白白的攻城师
摘要:ViewStub是一种特殊的View,Android官方给出的解释是:一种不可见的(GONE)、size是0的占位view,多用于运行时延迟加载的,也就是说真正需要某个view的时候。在实际项目中,我发现它试用的场景大体有2种:1. 某种只第一次需要显示的view,比如某个介绍性的东西,比如用户...
阅读全文
摘要:作为一名Android开发人员,我们都知道一个View从无到有,会经历3个阶段: 1. measure/测量阶段,也就是确定某个view大小的过程; 2. layout/布局阶段,也就是确定其左上右下坐标的过程; 3. draw/绘制阶段,也就是按照前面2步计算的结果,将view绘制在屏幕相应的位置
阅读全文
摘要:这个问题,当初在分析touch事件处理的时候按理应该分析到的,可是由于我当时觉得这块代码和touch的主题不是那么紧密,就这么忽略掉了,直到后来在这上面遇到了问题。其实这个现象做Android开发的应该或多或少的都遇到过,我在我们自己的app中也发现了这一现象,当初是百思不得其解,因为按照我自己...
阅读全文
摘要:前面我们看了key事件的处理流程,相信大家对此已经有了新的认识,这篇文章我打算带领大家来看看稍微复杂些的touch事件的处理流程。说它复杂是因为key事件本身就key down,up,long pressed这几种,而touch事件支持多指触摸,给人的感觉好像同时在发生多个touch事件一样,所...
阅读全文
摘要:为什么要介绍这2个方法呢?这是因为在我们的开发中最近遇到了一个很诡异的bug。大体是这样的:在我们的ViewPager中有2页的root view都是ScrollView,我们在xml里面都用了android:id="@+id/scroll_view"这样的代码,即2个布局里面的ScrollVi...
阅读全文
摘要:通过上篇的介绍,我们知道在对KeyEvent的处理中有非常重要的一环,那就是KeyEvent在focus view的path上自上而下的分发,换句话说只有focus的view才有资格参与KeyEvent的处理,所以说focused view在KeyEvent的处理中很重要,我们需要弄清楚明白fo...
阅读全文
摘要:刚接触Android开发的时候,对touch、key事件的处理总是一知半解,一会是Activity里的方法,一会是各种View 中的,自己始终不清楚到底哪个在先哪个在后,总之对整个处理流程没能很好的把握。每次写这部分代码的时候都有些心虚, 因为我不是很清楚什么时候、以什么样的顺序被调用,大都是打下l
阅读全文
摘要:在Android开发中为了inflate一个布局文件,大体有2种方式,如下所示: // 1. get a instance of LayoutInflater, then do whatever you want LayoutInflater inflater = (LayoutIn...
阅读全文
摘要:有好几周没写东西了,一方面是因为前几个周末都有些事情,另外也是因为没能找到好的写作方向,或者说有些话题值得分享、写作,可是自己积累还不够,没办法只好闷头继续研究了。这段时间一边在写代码,一边也在想Android中究竟是如何将R.layout.xxx_view.xml这样的布局文件加载到Andro...
阅读全文
摘要:和HandlerThread一样,IntentService也是Android替我们封装的一个Helper类,用来简化开发流程的。接下来分析源码的时候你就明白是怎么回事了。IntentService是一个按需处理用Intent表示的异步请求的基础Service类,本质上还是Android Ser...
阅读全文
摘要:在Android的日常开发中,相信大家都用过SharedPreferences来保存用户的某些settings值。Shared Preferences以键值对的形式存储私有的原生类型数据,这里的私有的是指只对你自己的app可见的,也就是说别的app是无法访问到的。客户端代码为了使用它有2种方式,...
阅读全文
摘要:HandlerThread是一种特殊的Thread,也就是有Looper的thread,既然有looper的话,那我们就可以用此looper来创建一个Handler,从而实现和它的交互,比如你可以通过与它关联的Handler对象在UI线程中发消息给它处理。HandlerThread一般可以用来执...
阅读全文
摘要:AsyncTask相信从事Android开发的同学都不陌生,基本都应该用到了,和以前一样我们还是先来看看此类的summary。AsyncTask可以确保更合理、容易的使用UI线程。这个类是设计用来执行一个后台操作然后将结果发布到UI线程,但却使你不必直接操作Thread和Handler(其实内部...
阅读全文
摘要:下面让我们花些时间来看看MessageQueue的具体实现,不过在分析代码之前让我们来理解下在类开头的一大段comments。MessageQueue是比较低层的类,是持有Message(在Looper中派发)的队列,但Message不是直接添加到MessageQueue中的,而是通过与Loop...
阅读全文
摘要:本来接下来应该分析MessageQueue了,可是我这几天正好在实际开发中又再次用到了SparseArray(之前有用到过一次,那次只是大概浏览了下源码,没做深入研究),于是在兴趣的推动下,花了些时间深入研究了下,趁着记忆还是新鲜的,就先在这里分析了。MessageQueue的分析应该会在本周末...
阅读全文
摘要:先来说说summary,Looper就是用来在某个线程中跑一个message loop。一个线程默认是没有message loop与之相关联的,为了创建一个你必须在这个线程中调用Looper.prepare方法,然后还得调用Looper.loop来开始消息循环,直到loop被停止。大部分和message loop的交互是通过Handler类来进行的。一个典型的例子在上一篇Handler中已经给过了,这里为了方便再重复下:This is a typical example of the implementation of a Looper thread, using the separati..
阅读全文
摘要:接上一篇分析,正如Android doc所说,Handler主要有2方面用处: 1. delay执行同一线程中的某个操作,也就是schedule message、runnable在未来的某一时刻执行; 2. 给另外一个线程发送message、runnable,让某个操作在另一个线程中执行。比如A线程
阅读全文
摘要:准备开始写点东西,算是对自己阅读源码的一个记录/笔记,也希望能对同样感兴趣的人有所帮助,希望能坚持下去,加油。 在Android的开发中,我们经常用到Handler.postXXX方法,或者View.postXXX方法,用来在下一次looper到来时执行。我是那样的人,什么事情最好能够知道下内...
阅读全文
浙公网安备 33010602011771号