phantomVK

Cease to struggle and you cease to live.

Android源码系列(17) -- QueuedWork

一、类签名 这是个内部工具类,用于跟踪那些未完成的或尚未结束的全局任务,新任务通过方法 queue 加入。添加 finisher 的runnables,由 waitToFinish 方法保证执行,用于保证任务已被处理完成。 这个类用于 SharedPreference 编辑后修改异步写入到磁盘,所以设计一个在 Activity.onPause 或类似地方等待写入操作机制,而这个机制也能用...

Android源码系列(16) -- MessageQueue

一、类签名 MessageQueue 是个低层次类,持有需要分发的消息。而消息并不是直接存入 MessageQueue,而是通过 Looper 相对应 Handler 加入。通过方法 Looper.myQueue() 可以获取当前线程 MessageQueue。 1 public final class MessageQueue MessageQueue、Looper 和 Threa...

Java源码系列(18) -- RejectedExecutionHandlers及子类

一、基类 RejectedExecutionHandler 所有拒绝策略都需要继承此类,用于处理被 ThreadPoolExecutor 拒绝的任务 1 2 3 4 5 public interface RejectedExecutionHandler { // ThreadPoolExecutor.execute拒绝执行任务后,此方法由ThreadPoolExecu...

Android源码系列(15) -- AsyncTask

一、类签名 1.1 作用 AsyncTask 令主线程的正确使用变得简单。无需维护线程或 Handler ,即能让任务在后台线程运算,并把结果提交到主线程。 1 public abstract class AsyncTask<Params, Progress, Result> AsyncTask 设计为围绕着 Thread 和 Handler,且无需构造普通线程框架的帮...

Android源码系列(14) -- IntentService

一、类签名 IntentService 是异步处理 Intent 的 Service 抽象子类。客户端通过 startService(Intent) 发送请求,服务根据需要启动,轮流处理收到的 Intent ,所有任务处理完后服务自行结束。 1 public abstract class IntentService extends Service 这种 “工作队列处理器” 模式主要适...

Android布局截取

布局 activity_main.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 6...

自定义DialogFragment宽度

一、现象 DialogFragment的xml布局: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 ...

仿Android微信消息气泡

一、前言 在网上搜索相关主题,大家千篇一律使用9-Patch图片作为气泡背景,效果不好还存在不少问题。 9-Patch本质是用图片作为背景,只是这张图片在设置的某些像素点上重复绘制达到拉伸效果。因为Android屏幕碎片化原因,所以一张9-Patch不能适配所有屏幕,至少需要分别适配 xhdpi 和 xxhdpi。 虽然每张9-Patch体积不大,但扩展到 不同场景要求不同圆角、点击气...

Android源码系列(13) -- ArrayMap

一、类签名 ArrayMap 是通用的键值对映射数据结构,相比 HashMap 有更高内存利用率。因为 ArrayMap 使用数组结构保存映射:一个整形数组存放哈希值,一个 Object 数组存放 Key 和 Value。 使用数组能避免为每个放入 Map 的entry创建额外对象(对比HashMap#Node),并能更有力地控制数组扩展的大小。 1 public final clas...

Android源码系列(12) -- SharedPreferences

一、概述 首先获取 SharedPreferences 实例,调用 sp.edit() 获得可编辑实例,写入数据并提交。 1 2 3 4 5 6 7 8 9 SharedPreferences sp = getSharedPreferences("PrefsName", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit()...

Android Studio不断indexing

自从 Android Studio 3.0 升级到 Android Studio 3.1.3 后,每次打开工程持续不断indexing,一秒钟会indexing好几次,且一直持续不终止。这个问题直接影响到开发速度:因为indexing过程中,编辑代码的代码提示不出现,自动代码检查运行不正常,更不说编译运行。 开始还以为是 Android Studio 3.1.3 存在bug,但是升级到 A...

Java源码系列(17) -- LinkedBlockingQueue

一、类签名 从类名可知,LinkedBlockingQueue是基于链表实现的阻塞队列。 1 2 public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable 类特点: ...

压缩Jekyll的HTML代码

2020.9.15更新: 经过长期测试后,确定压缩脚本的处理逻辑存在大量问题。如<pre>和</head>标签会被错误移除、空行没有正确移除等等。即使更新为最新发布版本,以上问题依然存在,因此不建议使用。 从16年10月至今,坚持每月写博客快2年了,也是使用GitHub Pages和Jekyll的2年。当时,用了第三方开源Jekyll主题,修修补补增加...

Java源码系列(16) -- ConcurrentSkipListSet

一、类签名 ConcurrentSkipListSet是一个基于ConcurrentSkipListMap的可伸缩并发(NavigableSet)实现。所有元素根据其可比较的自然次序,或构造时提供的Comparator决定排列顺序,具体由所使用的构造方法决定。 1 2 3 public class ConcurrentSkipListSet<E> extends Ab...

Java源码系列(15) -- CopyOnWriteArraySet

一、类签名 CopyOnWriteArraySet基于CopyOnWriteArrayList实现写时复制功能,并获得其线程安全的能力。插入前先检查元素是否包含在列表中,以保证集合元素去重。源码来自JDK10。 1 2 public class CopyOnWriteArraySet<E> extends AbstractSet<E> implem...