Be open to new experiences!
AI入门指南:从零开始理解人工智能
人工智能(英语:artificial intelligence,缩写为AI(英语文本)),指由人造机器所展现的智能。通常人工智能是指用普通计算机程序来呈现人类智能的技术。该词也指出研究这样的智能系统是否能够实现,以及如何实现。
LeakCanary检测到内存泄漏之后发生了什么
检测 # LeakCanary 是 Android 开发中最常用的内存泄漏检测工具之一。由于在 dump 内存快照时需要 挂起所有线程,这会带来明显的卡顿,因此它通常只在开发和调试阶段启用。 涉及到的类型有弱引用、引用队列和一个map。像是这样: 1 private val watchedObjects: MutableMap<String, KeyedWeakReference> = ConcurrentHashMap() 弱引用不会影响对象是否被回收,当弱引用被清理之后,弱引用会被添加进关联的弱引用队列。Leak Canary用到的弱引用类型KeyedWeakReference是WeakReference的一个子类,增加了key。弱引用的key也是watchedObjects的key,于是对象、弱引用、map几个关键信息就联系起来。
Google Play 企业开发者账号注册踩坑记录
注册企业账号 # 注册企业账号的第一步仍然是注册一个 Google 账号,这个过程比较简单。随后再进入 Google Play Console 注册开发者账号时,需要在个人开发者和企业开发者之间选择。网上关于个人账号的经验文章很多,这里主要记录企业开发者的流程和坑点。
Kotlin的枚举、密封类和密封接口
枚举 # 下面涉及到的语言均是Kotlin,理论上Kotlin和Java在枚举中具有的功能是相同的。 说到枚举,就有先入为主的概念,认为枚举只能定义两个简单的状态,像是下面这样: 1 2 3 enum class State{ OPEN, CLOSE; } 其实不是这样的,这只是最最基本的用法,把枚举当做常量使用了。
单例模式设计对比分析
懒汉式 # 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 的行为确实有所不同: