String_StringBuilder_and_StringBuffer

  • String是最基本最常被用到,它是不可变的,每次字符串变化都会重新分配空间,少量字符串操作可以使用String。
  • StringBuilder是弥补String字符串不可变,它提供对字符串的操作,提供append、insert、delete和replace方法对字符串增删改查。如果是单线程存在大量字符串操作时使用StringBuilder。
  • StringBuffer进一步弥补StringBuffer,在StringBuilder的基础上增加线程安全能力。如果字符串存在多线程的大量操作,可以使用StringBuffer。
阅读全文〉

策略模式

一个类的行为或者算法可以在运行时更改,策略模式改变对象的执行算法。属于行为型模式。

阅读全文〉

反射

反射就是在程序运行时动态加载类、方法或属性,在coding阶段是直接不知道对象是谁
普通场景创建一个类的过程是先判断类的Class对象是否加载到了内存中,Class对象已经加载到内存(字节码已经加载)就为实例对象分配内存,根据不同的垃圾收集器分配内存,GC使用复制算法或者标记整理算法内存规整场景下,只需要将指针向空闲的一边移动,这种分配方式称指针碰撞,另外一种内存存在碎片,碎片内存会保存在一个“空闲列表”中,从空闲列表中取出一块可容纳目标对象的内存区域来存储对象。如果Clas对象没有加载到内存中,就执行类的加载过程,经过加载、连接和初始化完成类的加载,再为实例对象分配内存。
反射通过Class对象创建实例对象,并获取类的属性和方法。
通过new对象,经过编译器安全校验,确认具体对象创建叫静态编译;反射这种方式叫做动态编译。

阅读全文〉

一问一答之okhttp篇

  • 简单说下OkHttp。

    OkHttp默认支持
    1共享一个scoket完成相同主机的请求,支持Http2.0,头部压缩、连接复用、服务端push,同一主机所有请求共用一个scoket连接;
    2.连接池,减少请求延迟(https http协议下)
    3.透明gzip压缩
    4.响应缓冲,减少不必要的网络请求。

阅读全文〉

Android组件化

Android应用达到一定规模后业务会越来越多,所有业务模块在同一module下耦合性会越来越强,这种强耦合带来开发维护成本增加,开发调试效率也会变低,项目组件化就势在必行。

阅读全文〉

Handler


本篇分为三个部分记录Handler消息机制,第一部分逐一对“四件套”源码(基于Android-29)进行解读;第二部分根据源码总结它们之间的关联;第三部分对Handler涉及到的问题进行解答。

阅读全文〉