大家好,我是秉心说。
这里是不定期更新的 好文分享,记录最近我读过的值得分享的文章。
微信不支持外链,点击文末 “阅读原文” 查看。
1. Zero-cost* abstractions in Kotlin
来自 Medium 上 Android Developers 团队。
介绍了 Kotlin 1.3 开始可用但仍处于 Experimental 状态的新特性 内联类 。内联类只有一个属性,一般是基本数据类型。和内联方法一样,经过编译器的黑魔法之后,内联类的值会被直接替换到调用处。
代码语言:javascript复制inlineclassDoggoId(val id: Long)
dataclassDoggo(val id: DoggoId, … )
// usageval goodDoggo = Doggo(DoggoId(doggoId), …)
funpet(id: DoggoId) { … }
这是一个 Kotlin Vocabulary 系列的文章,除此之后还介绍了 typelias 、sealed 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 。简单介绍了使用方法,并与 ButterKnife 和 Kotlin synthetics 做了对比。
至于到底应该使用哪个,仁者见仁智者见智了。我个人还是喜欢 Kotlin synthetics 。
4. AsyncTask is Deprecated, Now What?
挺喜欢的一位作者,对很多技术有自己独特的见解。
在 AOSP 的一次 commit 当中,官方提出了对 AsyncTask 的不满,容易造成内存泄露。作者首先反驳了并不是 AsyncTask 容易造成泄露,而是开发者对异步框架的使用不当。随后也给出了应该废弃 AsyncTask 的几点理由。
5. 原创 | Java堆内存是线程共享的!面试官:你确定吗?
来自 Hollis 的一篇公众号推文。
1、堆是线程共享的内存区域,栈是线程独享的内存区域。 2、堆中主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。
作者认为这两句话并不完全正确。如果你对此持有相反意见,不妨阅读这篇文章。
好文分享系列同步更新在 秉心说的技术博客 和我的公众号 秉心说TM ,欢迎扫码关注。