WindowManagerService简析 WindowManagerService的职责 Window的相关操作都是借由WindowManagerService实现的,而且它是WindowManager的管理者。 1.窗口管理负责窗口的启动、添加和删除。另外窗口的大小和层级也是交由WMS进行管理的。 核心成员:DisplayContent、WindowToken,WindowState。 2.窗口动画窗口间进行切换时,窗口动画由WMS 2019-01-30 Android
SparseArray简析 HashMap在Android开发中是一种常用的数据结构类型,但是占用内存方面相对会比较大,而且复杂的机制导致运行效率也不高。所以Android系统提供了SparseArray以及ArrayMap来对其进行替代。这也是Android性能优化的一种手段。 SparseArray SparseArray可以对key为Integer类型的HashMap进行替代。还有 LongSparseArray 2019-01-28 源码解析
Bitmap分析 Bitmap简介位图文件(Bitmap),扩展名可以是.bmp或.dlb。它将图像定义为由像素组成,每个点可以由多种色彩表示,包括2、4、8、16、24和32位色彩。 在安卓系统中bitmap图片一般是以ARGB_8888来进行存储的。 颜色格式 每个像素占用内存(byte) 每个像素占用内存(bit) ARGB_8888(默认) 4 32 ALPHA_8 1 8 ARG 2019-01-28 Android
ANR分析 ANR概述 ANR:Application Not Responding应用程序未响应,Android会要求一些事件需要在规定时间内处理完成,如果超过预定事件内未能得到有效响应或者响应时间过长,就会造成ANR。 ANR由消息处理机制保证,Android在系统层实现了发现ANR的机制,核心原理是消息调度和超时处理。 ANR本质是性能问题。实际上是对应用程序主线程的限制,要求主线程在限定时间内处理 2019-01-28 Android
数据结构--CopyOnWriteArrayList实现原理及简析 CopyOnWriteArrayList定义 ArrayList本身不是线程安全的,在读线程读取ArrayList的数据时,此时在去写入数据,就会触发fast-fail机制,抛出ConcurrentModificationException异常。也可以使用Vector去代替ArrayList使用,或者使用Collections.synchronizeList()包裹ArrayList。但他们都是 2019-01-18 数据结构
数据结构--ConcurrentHashMap原理及解析 HashMap本身不是线程安全的,通常在多线程情况下可以去使用HashTable替代HashMap使用,该类中基本所有的操作方法都采用synchronized进行修饰,所以在高并发的情况下,每次只能有一个线程获取对象监视器锁,并发性能太低。 针对上述情况,就产生了ConcurrentHashMap这个类去解决上述问题,提高效率。 ConcurrentHashMap重要参数分析tab 2019-01-16 数据结构
数据结构--ArrayList实现原理及简析 ArrayList定义ArrayList是基于List接口实现的大小可变的数组,元素允许为任意属性包括null。同时非有序,非同步(线程不安全)。主要用于装载数据。 ArrayList底层实现是数组。 ArrayList的重要参数分析12345678910//ArrayList 默认容量为10private static final int DEFAULT_CAPACITY = 10;//用于 2019-01-15 数据结构
设计模式--装饰模式 动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更加灵活。 装饰模式-组成Component抽象构件 component是一个接口或者抽象类,定义了我们最核心的对象,也就是最原始的对象。 1234public abstract class Component{ //抽象方法 public abstract void operate();} C 2019-01-11 设计模式
设计模式--责任链模式 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链路传递,直到有对象处理请求为止。 责任链模式-定义Handler:抽象处理者 该角色对请求进行抽象,并定义一个方法来设定和返回对下一个处理者的引用。 12345678910111213public abstract class Handler{ private Handle 2019-01-11 设计模式
RxJava 使用及解析 RxJava基本知识 RxJava是一个在JVM上使用可观测的序列来组成异步的、基于事件的程序的库。 通常情况下使用Handler、AsyncTask完成异步任务操作,当任务比较多的时候,使用这种方式就会变得相当繁琐,尤其是嵌套式的执行任务(需要上一项先完成)。 RxJava可以实现异步任务执行的前提下保持代码的清晰。通过创建一个Observable来完成异步任务,然后组合各种操作符实现不同的 2019-01-10 Hide
理解Window及WindowManager 1.基本概念Window:他是一个抽象类,具体的实现类为PhoneWindow,它对View进行管理。每个Window都会对应一个View和一个ViewRootImpl,Window通过ViewRootImpl与View建立联系。 WindowManager:是一个接口类,继承ViewManager,主要用于管理Window,具体实现类为WindowManagerImpl。实际使用中无法直接访问 2019-01-10 Android
ListView简析 ListView定义 专门用于处理那种内容元素很多,手机屏幕无法展示出所有的内容的情况。可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移到屏幕内了。 ListView相比RecyclerView,有一些优点: addHeaderVew(),addFooterView()添加头尾视图 android:divider设置自定义分割线 setOnItemClickList 2019-01-04 Android
include、merge及ViewStub相关 主要解析include、merge及ViewStub include 主要为了解决重复定义相同布局的问题。把一套布局封装起来,需要使用时使用标签引入。提高代码复用性 使用注意事项: 如若我们在中设置了android:id属性,这个id会覆盖原先`中layout设置的布局id,所以在引用该id时需要注意 如果需要在中需要使用andrdoid:**属性,必须要设置layout_width以及layo 2019-01-03 Android 性能优化
Java - 泛型 泛型基本概念 Java泛型是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。 本质上是编译器为了提供更好的可读性而提供的一种方式,JVM中是不存在泛型的概念的。 泛型的出现在很大程度上是为了方便集合的使用,使其能够记住元素的数据类型。泛型是对Java语言类型系统的一种拓展,可以把类型参数看作是使用参数 2019-01-02 Java
自定义ViewGroup实践 自定义ViewGrouop - FlowLayout实现方式 继承特定ViewGroup,例如LinearLayout 比较常见,效果类似于一堆View的组合。 实现比较简单,无需自己处理测量与布局的过程。 继承ViewGroup派生特殊layout 主要用于实现自定义的布局,按照自身需求制定不同的显示方法。 实现稍微复杂,还需要对ViewGroup进行处理,主要是自身的onMeasure 2019-01-02 Android