Kotlin-first but not kotlin-must
谷歌在 I/O 大会上宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言后,有更多的安卓程序投入Kotlin的怀抱。 Kotlin的语法糖更加提高了开发的效率,加快了开发速度,使开发工作变得有趣,也让我们有更多时间写注释了(笑)。但是其实对于Kotlin和Java在Android开发上的选择,个人觉得这个除了开发人员对语言的喜好的,同时也会应该到各自语言的魅力和特点,甚至项目的需求以及后续维护等等各个因素,没有绝对的选择的。我们要做到的是放大不同语言优点并加以拓展,不是一味只选择某个语言,语言不是问题,用的那个人怎么用才是关键。
利用Lazy帮助实现初始化
lazy() 是一个函数, 接受一个 Lambda 表达式作为参数, 返回一个 Lazy<T> 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给 lazy() 的 lamda 表达式并记录结果, 后续调用 get() 只是返回记录的结果。 先贴上代码:
fun startInit(component: Components.()->Unit){
component.invoke(Components.get())
}
class Components {
companion object{
private val entry = ArrayMap<String,Any?>()
private val instant by lazy { Components() }
fun get() = instant
fun getEntry() = entry
}
inline fun <reified T>single(single: ()->T){
val name = T::class.java.name
getEntry()[name] = single()
}
}
inline fun <reified T> get(name: String = T::class.java.name) : T{
return Components.getEntry()[name] as T
}
inline fun <reified T> inject(name: String = T::class.java.name) : Lazy<T> {
return lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { Components.getEntry()[name] as T }
}
// 使用例子
startInit {
single { RoomApi.getDao() }
single { RetroHttp.createApi(Main::class.java) }
}
private val main : Main by inject()
private val dao : MainDao by inject()
总结:简单的代码优化,提高开发效率
借助协程实现倒计时和超时等待任务
一、倒计时
这个一直都是安卓开发的常见需求,普遍可采用如下方案
1、RxJava