【DevTips】使用最相符的 Rx 流

如果你在盲目地使用 Observable,那么需要注意下,Rx 里的流也是很多类型的:FlowableObservableSingleMaybeCompletable如果你需要对外提供 API,准确地,对外提供一些方法,那么准确地使用跟业务场景最相符的 Rx 流,能有效地减少调用方的学习成本,降低出错几率。具体地:使用 Flowable,如果你需要支持 back pressure,也就是说,你上游的数据可能会发射非常频繁,而下游可能会处理不过来;使用 Observable,如果你的上游可能不太频繁地发射多次数据,下游都能处理过来;使用 Single,以表示上游的操作只有两种结果:成功和异常;一个例子是,发起网络请求,

【DevTips】谈谈 Kotlin 里构建对象

Builder 模式大家想必也都知道。但是应该在什么时候使用呢?如果满足以下条件,那么应该使用:需要构建的对象是 Immutable 的,也就是说,这个对象的实例属性应该是不能被更改的。需要构建的对象的可设置属性非常多,以致在 constructor 里塞下所有参数对调用方来说会非常麻烦。那么 Java 里常见的 Builder 模式再简单不过了(以下例子做了缩短,同时用了 Kotlin 来表达):class AppRequest { private var uid: String? = null private var appId:

android

【DevTips】Kotlin Coroutines Recipes

说起来,也有用 Kotlin Coroutines 一段时间了,多多少少会有些经验和想法。刚好前些天参加了一个 Kotlin Everywhere 的开发者会议,所以也打算就 Kotlin Coroutines 聊聊一些经验。文章标题名为 Kotlin Coroutines Recipes,Recipes 是菜谱的意思,这里不会去翻译官网上的文档,翻译这种事情很多人做过了,这里我主要结合一些例子去提供一些实践的经验。当然了,这里写的不一定就是对的,所以请保留态度地阅读,非常欢迎讨论。同时,没有特别说明,下面的例子会使用 Kotlin 标准库里的方法和类,不使用

journey

库布齐沙漠指北

端午期间去了个地方——库布齐沙漠。在很早之前就想去走一趟沙漠,刚好之前有朋友去过,于是咨询了下后,赶紧报了个团就出发了。接下来我会以「浅体验的角度」分享一下徒步沙漠的一些注意事项以及关于摄影相关的内容。一些背景如果忽略「天漠」的话,那么「库布齐」可以说是距离北京最近的一个沙漠了吧。「库布齐沙漠」位于内蒙古鄂尔多斯市郊,距离包头和鄂尔多斯都比较近,从北京出发的话约需要 8 小时到达。此沙漠长 400 公里,宽 50 公里,说小不小,说大不大。能看到一望无际的沙漠景观吗?如果你站在最高的山丘处,那么还是能看到远处的山,甚至是郊区的小房子。

More of RxJava

这是一系列文章的第一篇,这个系列没有什么非常明确的主题,可以看做是日常开发和协作里悟出来的一些技术相关的事情——或者说是技术方面的随笔。这一篇是关于 RxJava。曾经看到这么一篇文章,称赞 Kotlin Coroutine 大好,RxJava 可以直接丢弃了;也曾经看到一篇文章(事实上正是我刚开始学习 RxJava 的时候看的),称 RxJava 的本质就是异步。如果把这两篇文章放在一起看,那么似乎 “合理”:Kotlin Coroutine 解决了 JVM 世界里过去的 Callback 形式的异步回调,而 RxJava 的本质就是处理异步,

vlog

VLOG 000:北京,北京

很久之前就想做一个视频,或者说是现在大家喜欢说的 VLOG。但是做关于什么的视频呢?说实话心里不是非常有底——如果你有留意我社交账号的描述,可以看到这么一句简单的描述——拿相机的程序员。尽管我认为我「程序员」的属性可能还是占多数,但是在日常里我还是挺乐意拾起相机去拍摄生活的一些日常和非日常的事情——注意,这里用的是词是「拍摄」。关于摄像我一直很少有刻意去做。究其原因,如果追求质量的话,录制视频显然比拍摄静态照片难度高不少,技术上做到稳定不抖,题材上要做到有意思,再加上最后的剪辑,其实足以让人产生放弃的想法(没错,我已经挣扎很久了)。尽管如此,我还是决定在视频方面做一些尝试,因此这是一段一分多钟的我定义还算是 VLOG 的 VLOG。既然是第一段,我自我要求没有多高,

关于 Android Q 的 Scoped Storage

如果你还不了解 Android Q 的 Scoped Storage,那么请先自行详细阅读官方文档。Scoped Storage 的好处自不用说,以下会从两个角度来考虑这个新变化所带来的影响:媒体生产者媒体消费者NOTE:Storage Access Framework(SAF)不在本文讨论范围内,主要是考虑到知乎可能不会用上。媒体生产者举个简单的例子,得到一个 Bitmap,需要把它写入文件并能被检索:val file = File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "${System.currentTimeMillis()}.jpg"

flutter

SwitchDecor:给你的 Switch 截图添加色彩

事情缘由是这样的:入手 Nintendo Switch 也有一个多月了,买的游戏也有一些了,其中就包括著名的《分手厨房2》——说错了,是《煮糊了2》。不久之前跟一个朋友玩,玩完某一局我大获全胜,于是截了个图决定分享。当我在分享的地方插入了这个截图后,发现这图有点单调啊,完全体现不了这是一个 Switch 上的游戏——毕竟这是一个跨平台的游戏——于是想法就来了,之前我单独给自用的 OnePlus 6 写了一个带壳截图的 App,那么给 Switch 截图添加一些元素可能也是一个不错的思路。 于是当天就开始动手了,先说成果:这是一个叫 SwitchDecor

android

Nice meeting #Kotlin

最近开始学习使用 Kotlin 语言进行日常开发,目前首先对我的一个壁纸应用 MyerSplash 的 Android 版本开始下手——想起来年初重写 MyerList 真是白费了啊,重写完还没发布,估计我又得用 Kotlin 再写一次了。 正如官方所说的,Kotlin 跟 Java 有 100% 的互操作性,这意味着项目里可以同时存在 Kotlin 和 Java 代码,两者可以互相调用。而从 Java 转到 Kotlin,其实也并不需要完全重写代码—

Plugins for Android Studio

一些推荐的 Android Studio 插件。 Android ButterKnife Zelezny 在Activity,Fragment,Adapter中选中布局xml的资源id自动生成butterknife注解。 Lifecycle Sorter 以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K。 CodeGlance 在右边可以预览代码,实现快速定位。 GradleDependenciesHelperPlugin maven gradle 依赖支持自动补全。 AndroidProguardPlugin 一键生成项目混淆代码插件。 idea-markdown Markdown 插件。 folding-plugin 布局文件的分组(文件夹)。 Android Studio