好文分享第 1 期

463 阅读2分钟

大家好,我是秉心说。

这里是不定期更新的 好文分享,记录最近我读过的值得分享的文章。

1. Zero-cost* abstractions in Kotlin

来自 Medium 上 Android Developers 团队。

介绍了 Kotlin 1.3 开始可用但仍处于 Experimental 状态的新特性 内联类 。内联类只有一个属性,一般是基本数据类型。和内联方法一样,经过编译器的黑魔法之后,内联类的值会被直接替换到调用处。

inline class DoggoId(val id: Long)
data class Doggo(val id: DoggoId, … )
// usage
val goodDoggo = Doggo(DoggoId(doggoId), …)
fun pet(id: DoggoId) { … }

这是一个 Kotlin Vocabulary 系列的文章,除此之后还介绍了 typeliassealed classes 等等。

2. Database relations with Room

仍然是来自 Google Developers 的一篇文章,介绍了在 Room 数据库框架中,如何使用 @Relation 注解处理 一对一一对多多对多 关系。这一特性是在 Room 2.2 中支持的。

我也翻译了这篇文章 :[译] 如何用 Room 处理一对一,一对多,多对多关系?

3. Use view binding to replace findViewById

同样来自 Google Developers ,介绍了随着 Android Studio 3.6 正是发布的 View Binding 。简单介绍了使用方法,并与 ButterKnifeKotlin synthetics 做了对比。

view-binding

至于到底应该使用哪个,仁者见仁智者见智了。我个人还是喜欢 Kotlin synthetics 。

4. AsyncTask is Deprecated, Now What?

挺喜欢的一位作者,对很多技术有自己独特的见解。

在 AOSP 的一次 commit 当中,官方提出了对 AsyncTask 的不满,容易造成内存泄露。作者首先反驳了并不是 AsyncTask 容易造成泄露,而是开发者对异步框架的使用不当。随后也给出了应该废弃 AsyncTask 的几点理由。

5. 原创 | Java堆内存是线程共享的!面试官:你确定吗?

来自 Hollis 的一篇公众号推文。

1、堆是线程共享的内存区域,栈是线程独享的内存区域。 2、堆中主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。

作者认为这两句话并不完全正确。如果你对此持有相反意见,不妨阅读这篇文章。

好文分享系列同步更新在 秉心说的技术博客 和我的公众号 秉心说TM ,欢迎扫码关注。

秉心说TM