opoojkk

Be open to new experiences!

单例模式设计对比分析

懒汉式 # 1 2 3 4 5 6 7 8 9 10 // java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } 1 2 // kotlin object KotlinSingleton {} 优势: 实现简单; 没有同步开销; 不足: 类加载时创建,可能造成资源浪费; 线程安全:

发布android库到Maven Central

平时写一些小东西时有一部分代码是很常用到的,总不能每次都写一遍,每次都复制也太麻烦了,最简单的方式就发布到maven仓库,用拉取远程仓库的方式解决。因此,废了一顿劲发布到maven central中。也刚好记录下来,帮助有需要的人。

Fragment重建过程详解

当Activity的配置发生变化或者低内存被回收后,会触发Activity的重建。可以通过重写onSaveInstanceState和onRestoreInstanceState实现重建时的保存和恢复逻辑。

Kotlin的fun interface

当我们写Java时有这么一种情况,需要用到回调,但是回调中只有一个方法, 这时候的写法可以更简便,举个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class SAMJava { public static void main(String[] args) { // 写法1 execute(new BlockJava() { @Override public void invoke() { // do something } }); } static void execute(BlockJava blockJava) { blockJava.invoke(); } } interface BlockJava { void invoke(); } 上面是Java中传递匿名对象最最普通的写法,换用lambda的形式可以写成:

协变与逆变解析

泛型 # 泛型的作用是能对不同的类型抽离相同的逻辑,写成模板类和方法,以此减少重复代码。 但是,我们知道在Java和Kotlin中的泛型只在编译期间生效,运行时都是Object。 在一般的使用场景中是没有问题的,像是这样:

LiveData与StateFlow对比分析

之前写过LiveData的内部实现LiveData,Jetpack中还有另一个组件StateFlow,两者作用非常类似,有什么差别呢? StateFlow、Flow 和 LiveData StateFlow 和 LiveData 具有相似之处。两者都是可观察的数据容器类,并且在应用架构中使用时,两者都遵循相似模式。 但请注意,StateFlow 和 LiveData 的行为确实有所不同:

协程与Kotlin协程对比

协程到底是什么呢? 这是我看到Kotlin协程之后的第一个问题。在回答是不是什么之前,先弄清楚什么是怎么定义的,协程也是一样。 在搜索引擎得到的答案都是"轻量化线程"、“非阻塞”、“协作式"之类的关键字关键字,真的是这样吗?

WebView JavaScript接口实现原理

在工作中有和前端混合开发的项目(前端的代码运行在Webview中),混合开发涉及到前端和客户端之间方法的调用,花了点时间弄明白是实现调用的。 实现 # 我们都知道是通过WebView的addJavaScript方法将Android的方法添加进Webview,之后前端才可以调用到的,因此入口从它开始。

理解Android插件化

12年我还在上初中,AndroidDynamicLoader已经只吃了Fragment的插件化实现。之后不断演变,从dynamic-load-apk,到DroidPlugin,再到Atlas。 说来惭愧,时至今日才有机会接触到,不禁想一探究竟。

Android序列化方案对比

从开始学习Android,到现在看过很多次有人争论Android为什么用Parcelable,而不是Java提供的Serializable接口。 除了使用两者的方式不同外,国内(大陆)目前最普遍的观点是认为Serializable用了大量的反射,导致速度要比Parcelable慢。