Android Binder

概览: Binder 架构图 图中的Client,Server,ServiceManager之间交互都是虚线表示,是由于它们彼此之间不是直接交互的,而是都通过与Binder驱动进行交互的,从而实现 IPC 通信方式。其中 Binder驱动 位于内核空间,Client,Server,ServiceManager位于用户空间。 这四个角色的关系和...

金融笔记

「香帅的北大金融课」 时间就是金钱 时间的价值 — 买1万块送1万块30年后的国债的套路 资金的约束 越是伟大的事物(大到修建运河,小到个人买房),越需要大资金的快速集聚和有效配置。 抵御风险 保险:让社会分担、分散个体的风险 股票:让更多人“利益共享,风险共担” 风投、创投:让社会分担创业、创新风险 股票、风投等金融工具,使得我们人类对风险的承受...

Gson 技巧

注解 @SerializedName: 配置 JSON 字段名字 @Expose:配置是否参与序列化和反序列化 有2个配置项,默认都为 True : @Expose(serialize = true,deserialize = false) new Gson()不起作用,需要配合 GsonBuilder.excludeFieldsWithout...

Java 易混淆归类

String / StringBuilder / StringBuffer StringBuffer 是线程安全的,在并发情况下可以使用 StringBuffer StringBuilder 是线程不安全的,相比于 StringBuffer 拥有更好的性能,大多数情况下可以使用 StringBuilder. 在 Java8 中,字符串相加会被转换...

对 Builder 模式的思考

在实例化一个很多参数的对象,或者参数有默认值的时候,用 builder 模式可以极大提高使用者的体验 避免被实例化对象部分成员变量的重复初始化 分析 上面第1条我想大家都认可,也是初次使用 builder 模式的最直观感受吧。我们着重分析下第二条:“避免被实例化对象部分成员变量的重复初始化” 如果一个对象需要很多可配置参数,一般有2种方...

Android RecyclerView 知识点补充

graph TD A[RecyclerView] --> B(LayoutManager) A --> C(Item Animator) A --> D(Adapter) ListView 相对 RecyclerView 的局限 只有纵向列表一种布局(RecyclerView 通过自定义 LayoutManager 还可解锁更多姿势) 没有支持动画的 AP...

Android MVVM 模块化架构

序 这次的MVVM不是传统上的,而是需要配合Google的 ViewModel,LiveData使用的。 严重使用了 Dagger2,轻度依赖了ARouter。 ViewModel ViewModel 是要交给 Dagger 来管理的,比如: 1 class UserActivityVM @Inject constructor(applicatio...

Android View 的绘制

View 的绘制流程 onMeasure 流程 父View 调用每个子View的 measure() 方法,让子 View 自我测量。 父View 根据子 View 给出的尺寸,得出子 View 的位置,并把它们的位置和尺寸保存在 父View。 根据子 View 的位置和尺寸,计算自己的尺寸,并调用 setMeasuredDimension 保存下来 Vi...

Android 文字测量

文字的对齐 将文字的对齐,必须知道 paint 的属性,如下图所示:(查看示例地址,自己运行下就能搞清楚这些线条了) 上图中,除了baseline,其他的都是 paint 的成员变量,而baseline是由使用者自己定义的,其中 TextView 就有 定义 baseline 成员变量 其中top,bottom,ascent,des...

Android View.post

View.post 使用 确保执行 runnable 的时候,View 已经初始化完成。 可以在将 runnable 丢到 UI 线程去执行 Causes the Runnable to be added to the message queue. The runnable will be run on the user inte...