夏敏的博客

一名Android程序员的技术博客

谈谈那个听起来挺高大上的ThreadLocal

ThreadLocal估计很多人都没听过,因为说实话平时写代码很少用到,我第一次看到代码里用ThreadLocal是在Looper的源码,Looper的源码中有下面这样的一个定义: st...

应用较广泛模式之装饰者模式

一年逛一次设计模式,每次都有新感觉!

设计模式系列仍旧没结束,让我们继续吧.. 装饰者模式是我个人比较喜欢的一个设计模式,为什么这么说呢,使用装饰者模式给我们的程序提供了一种动态扩展的功能,我们可以在不动原有的类的情况下添加新功能...

Android多进程应用之接口可靠性优化

你的AIDL接口是否可靠?

前言 我们都知道Android可以通过AIDL进行多进程通信, 既然是多进程, 服务方和客户端即不在一个进程里面,那么在调用方调用的时候服务方可能挂掉了. 什么?你的服务端代码稳定的很,就是不...

再次深入final关键字

匿名类用到的变量为什么一定要是final的呢?

提起final变量,大家都是耳熟能详, final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final类不能被继承,没有子类,final类中的方法默认是final的。 ...

AIDL中参数的out,inout问题

在AIDL传输过程中,我们有时需要传递自定义的类型,当然网上有很多教程,要把这个类型implements Parcelable,再写个aidl文件声明一下。 如下便是我们自定义一个InfoBe...

WebView加载Github工程时直接进入README界面的几种方式

用JS直接编写插件给webview

前言 在开发KeepGank的过程中遇到了一个问题,就是Github的手机版本网页进入时会是这个样子。 比如打开RxJava的网页会是这个样子,路径为:https://github.com/R...

TCP粘包的那点事儿

Nagle算法带来的弊端-粘包

提起大名鼎鼎的TCP,其特性我们大家都是倒背如流,TCP是面向连接的,UDP是面向非连接的。那么在通信中我们每次发送的帧数是有大小限制的,这个大小受很多影响,当然是木桶效应,我们的传输单元有大小...

Android音频知识介绍-从AndroidRecord看起

PCM、采样率、采样精度、码率、WAV

前言 从一个初始化AudioRecord的构造传参看起: RecorderHelper.getInstance().initRecoder( t...

插件化入门篇-如何启动一个未注册过的Activity

看我赵云在AMS七进七出

几乎所有的插件化都会要的一个需求,启动一个未注册的Activiy,即加载插件包中的Activity,并且主应用并不知道插件应用中会有什么Activity,这是各个插件化框架主力解决的问题之一。 ...

Android路由(一)-scheme实现网页链接携带参数跳转到Activity

Scheme Scheme这个词语我们可以在Uri使用时见到,有uri.getScheme()方法。在android中scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的sc...

深入Java语法糖之泛型

剥去那些高大上的语法的外衣

前一阵子谷歌推的Kotlin,本质上还是Java,我对其的理解就是满满语法糖的Java,因为看了Kotlin写完的代码编译后变成java class,那些高级特性都变成了普普通通的java实现....

Android设计模式之责任链模式

一年逛一次设计模式,每次都有新感觉!

去年这时候就在写设计模式的文章了,但是没写完,有好几个没有写,现在打算继续写,争取把设计模式写完,本来这些很简单的模式我打算一篇写几个的,但是还是遵从单一职责原则,每篇文章写一个比较好. 责任...

Glide源码解析

Glide源码有很多值得学习的地方,各种设计模式用的堪比AOSP,不过也实在是有够复杂

调用方式 我们先看一下Glide的用法,相信大家都会. 精彩之处在于 功能强大,RESTful调用 不用我们处理取消问题,自绑定生命周期 不用在Application初始化 ...

图片加载框架的打造(四)-封装-完善-总结

上一章链接 简单图片加载框架的打造(三)-加载器缓存器设计 几个关键的类都设计完了,该我们封装打通的时候呢,我一直喜欢RESTful风格,况且现在是2017年代码调用还不链式不能忍. 看一下...

简单图片加载框架的打造(三)-加载器缓存器设计

上一章解分发器的设计:简单图片加载框架的打造(二)-分发器设计RequestQueue 加载器与缓存器的接口都在第一章定好了,这边只需要完成其接口.我们看一下UML图 Loader L...