- 博客(112)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android MessageQueue源码分析
MessageQueue是Android消息机制的核心,熟悉MessageQueue能够帮助我们更清楚详细地理解Android的消息机制。这篇文章会介绍MessageQueue消息的插入(enqueueMessage)和读取(next),native层的消息机制,以及IdleHandler和SyncBarrier的逻辑原理。源码是基于6.0。
2016-10-17 00:27:53
3604
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 为什么Activity生命周期函数是运行在UI线程
这是我自己给自己提的问题,或者说是Activity的生命周期函数是怎样运行在主线程的?下面简单分析一下,讨论的问题其实远远不止于这个问题。会涉及到进程的启动,Binder的线程池,ActivityThread中的消息处理。
2016-08-19 00:20:31
2019
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 AppWidget源码分析(2)---updateAppWidget过程分析.md
前面一篇文章,分析了AppWidgetProvider和RemoteView的源码,从中我们可以知道它们的实现原理,AppWidgetProvider是一个BroadcastReceiver,所以它是通过广播接收通知的,收到更新通知后,AppWidgetProvider需要去提供View供远程进程显示。这篇文章分析这个传输过程,分析updateAppWidget方法。
2016-08-13 01:41:00
5248
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 AppWidget源码分析(1)---接口类
最近项目中接触到AppWidget,相对来说这部分比较简单,所以趁着空余时间详细阅读了AppWidget的源码。这篇文章主要是从源码上分析AppWidget中API类的相关原理,相关类的简单功能介绍和实现原理。关于使用,建议看指导文档。
2016-08-09 23:15:35
2420
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android Accessibility使用及事件流程简介
Accessibility是Android从API 4开始提供的一个功能,它主要目的是帮助一些因为有视觉,听觉,身体障碍而无法完全使用触摸屏或铃声等的用户来使用Android的。而实际上现在很多开发者都用它来实现一些其他功能了,比如说微信抢红包,自动安装APK,强制停止应用等。下面来简单介绍一下它的相关使用以及原理
2016-08-04 23:25:07
10941
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android SharedPreferences源码分析
我们经常使用SharedPreferences保存一些简单的数据,比如Settings的数据。如果我们只是简单的使用,可能没什么问题,但是如果要用好它还是得明白它的实现方式,下面来从源码上来分析下SharedPreferences的缓存,异步读写实现,多线程,多进程访问。
2016-07-18 23:53:35
4487
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android Bitmap深入介绍(二)--- 优化技术
这一篇主要介绍Bitmap相关的一些优化技术,包括加载图片,图片内存管理,图片缓存。
2016-06-13 15:14:02
4853
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android源码适配器模式---Activity类结构
其实适配器模式在Android源码中非常多,而从整体的源码角度上来看Activity的结构就是一种适配器模式。从这个角度上面看Activity,对Activity和应用层框架会有更加深入的理解。
2016-06-13 10:35:16
3920
原创 Hugo源码分析
Hugo是JakeWharton大神开发的一个通过注解触发的Debug日志库。它是一个非常好的AOP框架,在Debug模式下,Hugo利用aspectj库来进行切面编程,插入日志代码。通过分析Hugo的代码能够对gradle以及aspectj有一个非常好的了解。
2016-11-05 22:41:54
4459
原创 Android源码访问者模式---HtmlDocument
访问者模式是设计模式中相对比较复杂的设计模式,在Android源码中的UnifiedEmail项目中的HtmlDocument就使用了访问者模式,Email中的内容可以是Html文档,而Html文档需要解析保存,HtmlDocument就是html节点的一个容器,本文将介绍HtmlDocument与访问者模式(源码基于6.0.1_r30)。
2016-06-23 23:16:03
1357
原创 Android Bitmap深入介绍(三)--- 开源加载框架简述
目前使用非常广泛的框架技术主要有Android Universal Image Loader,Picasso, Glide和Fresco,最开始出现的应该算是UIL(Universal Image Loader),记得刚开始用图片加载框架的时候,主要就是使用UIL,UIL功能丰富。Picasso是Square搞出来的,Glide与Picasso比较类似,Google推荐Glide,Fresco是Facebook推出的
2016-06-19 21:14:42
2834
原创 Android Bitmap深入介绍(一)---基础
在Android应用开发中,我们经常需要跟图片打交道,而图片一个很麻烦的问题是占用内存非常大,经常导致OOM,了解Bitmap相关信息,不同sdk版本中Android图片处理的变化,以及一些优化处理的方式对我们平时开发中对图片的会非常有帮助。这篇先介绍Bitmap基础内容,关于像素,存储信息,以及加载。
2016-06-08 00:31:17
27213
1
原创 Android4.0 Bitmap Parcel传输源码分析
很久之前就看到有网友遇到用Parcel传Bitmap的时候,会遇到因为图片太大而报错,都在讨论传输Bitmap的时候的大小限制,但是实际上应该只有在4.0之前会有限制,4.0之后图片传输采用了Blob来传输,最终会使用ashmem来传递占用内存大的数据。下面分别介绍4.0前后Parcel对图片传输的异同。
2016-05-29 11:32:06
2781
原创 Android6.0 Bitmap存储以及Parcel传输源码分析
如果想要对Android Bitmap进行更多的操作,理解好Bitmap的实现将会有非常大的帮助,另外Android在6.0中增加了asm存储图片。这篇文章就通过源码来分析Android6.0中的Bitmap。本文主要分析Java层与native层的Bitmap,以及Bitmap的储存和Parcel传输。源码基于6.0,所以会有一些新的特性。
2016-05-24 14:55:54
9494
3
原创 Xposed源码阅读小结
最近借助着邓凡平的这篇文章深入理解Android(三):Xposed详解去阅读了一下Xposed的Hook源码,在这里总结一下Xposed使用的一些东西。
2016-05-20 20:16:23
1154
原创 FutureTask源码分析
FutureTask是JDK1.6新增的内容,间接实现了Future, Runnable接口。前面已经介绍过了Future的get方法会阻塞在那,等待执行完成,获取结果,那么FutureTask是怎么实现这一功能的呢?LockSupport是用来创建锁及其他同步类的基本线程阻塞元素,它的park和 unpark能够分别阻塞线程和解除线程阻塞。
2016-05-19 14:14:23
2587
1
原创 Callable, Future和FutureTask简述
JDK1.5后新增了一些接口用于并发编程的接口,Callable,Future。以及1.6添加了FutureTask。之前看到了他们的使用,JDK1.8还添加了CompletableFuture,一直想了解一下这些东西。这里记录下对Callable, Future和FutureTask的学习。
2016-05-16 15:47:15
944
原创 关于Android事件派发流程的理解
以前看了很多人介绍的Android事件派发流程,但最近使用那些来写代码的时候出现了不少错误。所以回顾一下整个流程,简单介绍从手触摸屏幕开始到事件在View树派发,从源码上分析ViewGroup.dispatchTouchEvent。
2016-05-12 20:04:15
6287
1
原创 关于Android MVP模式的思考
最近经常看到各种介绍MVP模式的博客的,以前写的项目基本都是不断重构项目,直接考虑模块化,重用,精简,将项目代码变得更加精简,提高代码之间的复用性。看了MVP模式后,感觉有很多地方可以优化的,决定去总结一下自己代码中的问题并优化,算是对自己之前写的代码的回顾。好的模式能够让人在阅读的时候能够很好地理解代码,在对程序进行修改的时候能够快速简洁,并且不对原有代码结构破坏。
2016-05-05 11:18:23
2617
原创 Android Binder跨进程与非跨进程的传输异同源码分析
网上很多文章都介绍了Service的绑定过程,但是并没有介绍对于跨进程与非跨进程,对于不同的返回值,其具体有什么区别,以及具体是怎么实现的。这篇文章就根据源码分析Android究竟是在哪部分来控制跨进程与非跨进程Binder的传输的,Binder究竟是怎么传输的。
2016-04-30 17:08:34
8551
原创 Android源码桥梁模式---FragmentCompat
FragmentCompat是一个用于访问Fragment特征的帮助类,它在support v13开始以一种向后兼容的风格提出。它是如何向后兼容的呢?就是使用桥梁模式来向后兼容。它是一种简化了的桥梁模式,下面将简单介绍FragmentCompat与桥梁模式。
2016-04-26 19:45:31
4110
原创 Android源码代理模式---Binder
Binder是Android的进程间通信核心,如果看过Android源码,你会发现源码中Android的各种核心服务都是通过Binder机制进行相互通信的。在Binder的client部分就是通过代理模式来访问Server端的。这里想通过代理模式来详细介绍Java层Binder(源码基于6.0.1)。文中会简单介绍代理模式,详细介绍Binder机制。代理模式意图对其他对象提供一种代理以控制对这个对象的访问。
2016-04-23 11:35:31
4950
原创 Android源码抽象工厂---IPolicy
在Android源码中,这个IPolicy就是一个简单的抽象工厂模式。它负责创建Winodw,WindowManagerPolicy, LayoutInflater,FallbackEventHandler。抽象工厂意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。下面分析一下IPolicy及其实现,以及创建的相关对象
2016-04-19 11:45:29
3263
原创 Android源码装饰模式---ContextWrapper
如果说Android源码中哪个地方装饰模式应用的最明显的话,那肯定是非ContextWrapper莫属了,ContextWrapper是一个透明的经典的装饰模式。本文将通过装饰器模式分析Context源码结构。本文基于的Android源码是(android 5.0.0)。首先先介绍一下装饰模式。装饰模式意图装饰模式动态地给对象添加额外的职责,就添加功能来说,它比子类的方式更加灵活。
2016-04-14 16:39:51
14544
2
原创 Http keep-alive 与Tcp keep-alive
前两天面试遇到一个问题:如果让你对一个项目通信协议进行选择的话,你会选择Http还是Tcp(当时问的是套接字,其实套接字还有UDP啦,我好像也没去讲)协议?感觉当时脑子转的不太灵活。而且以为Http keep-alive与Tcp keep-alive是差不多的,所以根本没去讲两者之间的keep-alive。每次面试回答问题都有点着急,所以思考不够。实际上两者是不同的,下面分别介绍一下。
2016-03-31 17:01:50
1967
原创 Java方法签名与JNI,反射
http://blog.houzhi.me/2016/03/19/java-signature-reflect-jni在这段时间写东西,必须要先吐槽一下找实习的杯具。找个实习不容易,没经验,各种跪。一直都觉得在Java反射中,那些反射的方法调用都很有规律,每一个调用都需要相同的特性:函数对象(Method),函数参数,类对象。今天坐在电脑前又回忆了JNI的调用方式(C++调用Java),也需要相同的
2016-03-19 10:36:11
2693
原创 Retrofit源码解析
RetrofitRetrofit是Github上面squre组织开发的一个类型安全的Http客户端,它可以在Java和Android上面使用。Retrofit将描述请求的接口转换为对象,然后再由该对象去请求后台。Retrofit将请求对象化了。目前已经发布了2.0beta版本。
2016-03-03 18:12:26
1010
2
原创 Otto与EventBus框架比较
最近这几天经常在空闲时间看到了AOP编程,其实也就是对面向事件过程编程,一开始一直很难理解这个名次。不过看到Android正好有面向事件编程,程序解藕的开源库(Otto,EventBus)。所以闲暇时间就去看了一下这两个库的源码,写篇博客记录一下。其实很多时候,沉下心去做一件事就好了,收获会伴随着的。用法首先从用法上面来说,两个框架的用法本质上其实是差不多的:注册(register),发布事件(po
2015-11-19 19:01:40
4589
原创 了解Java泛型
Java泛型是从JDK1.5开始引入的,它与C++的模版非常类似。但是Java的模版完全在编译的时候实现,使用一种擦除的技术在编译的时候就将模版完全替换,由编译器执行类型检查和推断,编译成普通的非泛型字节码。正因为如此,虽然Java泛型是Java类型安全的一大进步,但是使用起来的时候可能会遇到各种非常困扰的问题。Java泛型不协变在Java中,因为Number是Integer的父类,所以Intege
2015-11-04 14:43:29
765
原创 Java泛型Type体系
最近看开源代码,看到里面很多Java范型,并且通过反射去获取范型信息。如果说要看懂范型代码,那还是比较容易,但是如果要自己利用范型写成漂亮巧妙的框架,那必须对范型有足够的了解。所以这两三天就不在不断地看Java范型相关的东西。如果说想要明白通过反射去获取范型信息,那么Type体系是必须要了解的。Java从1.5开始引入范型,并且也引入了Type体系。首先给出Type的类型树UML图,以便有个整体的认
2015-11-03 15:11:43
6811
2
原创 Java注解简述
Java注解简述国庆假期前后,基本是看一下开源的项目,发现不少优秀的开源项目都用了注解和动态代理相关的知识,所以顺带有好好地研读了一下注解和动态代理,加深了对注解和动态代理的认识。博客都差不多接近要断了,前一段七七八八地看了各种东西,一直都没有写东西,懒惰了很多。整的现在很多东西都没有做好,突然觉得不仅仅是专业学习,其他的各种东西也应该有点追求。力求生活精致。Java从JDK5开始引入了注解(Ann
2015-10-21 15:13:33
776
原创 Java动态代理
Java动态代理最近发现很多项目都用到了动态代理,就又认真学习了下Java动态代理。代理模式应用在很多地方,但是如果在编码的时候就添加代理类,那整个代码就会变的非常冗余,繁琐。这样动态代理就应运而生了,动态代理的代理是在程序运行的时候动态生成的。动态代理只需要提供一组接口,以及被代理的对象,程序就会自动生成代理类,而且你还可以在运行方法的前后做一些自己需要的操作,甚至于不执行方法。下面介绍一个动态代
2015-10-21 15:12:15
718
原创 Java F-bounded
Java F-bounded上次在StackOverflow上面问了一个问题,下面这种模式有什么用处. abstract class Base<T extends Base<T>> { } class Variant<T extends Variant<T>> extends Base<T> { }我是在另外一个问题上面看到的这样的一段代码,一开始一直都不理解,后面看了那些回
2015-10-21 15:10:55
973
2
原创 java虚拟机Class格式与指令
前几天看《深入理解java虚拟机》中关于.class文件的详细解析,实际上Class文件里面就是包含着运行时候的指令,以及数据等内容。如果想要能够读懂Class文件,那一定需要对Class的文件结构以及Java虚拟机指令集有一定的了解JVM指令集java虚拟机也有自己的指令集(字节码指令集),指令占一个字节长度,也就是说JVM中的指令最多也就256个。一常用的指令如:iload,iadd,isub,
2015-09-10 21:09:16
1163
原创 Http协议
老早就学了Http协议,但是最开始学HTTP协议的时候,没有从内心意识到他的地位之高,它的使用范围之广。那时候学习的时候,基本时联系到平时使用的Apache Http包或者Java HttpUrlConnection来考虑了。更多地是在应用,或者说是比较,但是最近接触到的各种知识,像REST规范。以及使用的API各种接口。越来越觉得HTTP协议是简单但重要的东西。以前对HTTP协议,是从应用来考虑的
2015-09-10 20:01:07
582
原创 JVM内存管理
内存区域Java的内存区域主要包括虚拟机栈,本地方法栈,程序计数器,堆,方法区。虚拟机栈是对应于每个线程运行时候的东西,JVM会给每个线程分配一个栈,线程运行就是执行栈里面的东西。这个栈又包含了帧,帧对应着线程函数。栈里面只能够出帧和入帧,对应着每个函数的运行和运行完成。本地方法栈是每个线程native代码对应的部分。与虚拟机栈很相似,但是本地方法栈执行的是Java Native方法。程序计数器可以
2015-09-10 19:45:57
636
1
原创 子View按规则自动移动Layout
项目地址:https://github.com/xxxzhi/ChildAutoMovi-Layout之前看到一个屏幕上有点不断闪动的,并且移动的界面。当时久萌生一种想法,能不能做一个这样的选择界面呢?实现起来其实比较简单,写了一下之后,感觉完全可以做一个可以很好地重用,并且方便扩展移动规则的View。趁着平时时间,就干脆实现了它,并且粗略写了几种移动规则。ChildAutoMoviLayout实现
2015-06-21 12:22:32
1244
原创 Runtime.exec使用错误导致延迟
这篇文章是纪录了一个bug解决的过程,但是我还是没有能够真正地找出bug的缘由。希望大牛能够详细解释。问题的发现当接触的系统越来越大的时候,对于系统的性能越来越高的时候,找到表面问题的真正原因就慢慢地成为了一个比较麻烦的问题。说实话,一开始我一直不知道是因为Runtime.getRuntime().exec()导致服务处理时间缓慢。发现这个原因倒是花了不少时间。
2015-06-02 21:17:25
3520
3
原创 Android PagerAdapter notifyDatasetChanged
forget to call notifyDatasetChanged 错误这几天一直在完善之前自己的写的Android应用。想用ViewPager让之前界面能够滑动阅读。但是滑动过程中,经常会莫名其妙地遇到一个问题。莫名其妙地提示ViewPager expected 10 counts,but found 20. forget to call notifyDatasetChanged. 意思很明
2015-04-28 22:02:02
1391
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人