实战系列

话不多说,Android实战系列集合都已经系统分类好,由于文章篇幅问题没法过多展示


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

initViews()
}

private fun initViews() {

text1.click{

val intent = Intent(this@MainActivity, Demo4ExtrasDelegateActivity::class.java)
val u = User(“Tony”,“123456”)
intent.putExtra(“user”,u)
intent.putExtra(“string”,“just a test”)
startActivity(intent)
}

text2.click {

val intent = Intent(this@MainActivity, Demo4PrefsDelegateActivity::class.java)
startActivity(intent)
}
}
}

这里的click函数,在使用Kotlin高效地开发Android App(二)中已经讲述过,就不在重复讲述。

Demo4ExtrasDelegateActivity接受从MainActivity中传递过来的参数。

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.safframework.delegate.domain.User
import com.safframework.delegate.extras.extraDelegate
import com.safframework.log.L

/**
*

  • @FileName:
  •      com.safframework.delegate.activity.Demo4ExtrasDelegateActivity.java
    
  • @author: Tony Shen
  • @date: 2018-06-13 17:42
  • @version V1.0 <描述当前版本功能>
    */
    class Demo4ExtrasDelegateActivity: AppCompatActivity() {

private val user: User? by extraDelegate(“user”)
private val s:String? by extraDelegate(“string”)

public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

L.json(user)
L.i(s)
}
}

所传递过来的任何对象类型,都可以使用如下的方式获取Extras。只要保证,extra的key正确即可。

private val user: User? by extraDelegate(“user”)
private val s:String? by extraDelegate(“string”)

与Extra类似,SharedPreferences也可以使用属性委托的方式进行封装。

三. infix

中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式允许我们使用一个单词或字母来当运算符用(其本质还是函数调用),忽略调用的点和圆括号。

Kotlin的中缀表达式,需要满足以下条件:

  1. 使用infix修饰
  2. 只有一个参数
  3. 其参数不得接受可变数量的参数且不能有默认值。

例如:

infix fun Int.add(i:Int):Int = this + i

infix fun Int.加(i:Int):Int = this + i

fun main(args: Array) {

println(5 add 10)
println(5 加 10)
}

执行结果:

15
15

在 Kotlin 中,使用中缀表达式最经典的例子,莫过于使用kxdate来操作日期。 kxdate github地址:https://github.com/yole/kxdate

val twoMonthsLater = 2.months.fromNow
val yesterday = 1.days.ago

等价于:

val twoMonthsLater = 2 months fromNow
val yesterday = 1 days ago

由此可见,中缀表达式能让代码看起来更加接近于自然语言。

四. inline

Kotlin 天生支持函数式编程,高阶函数和 lambda 是其一大特色。

使用高阶函数会带来一些运行时间效率的损失:每一个函数都是一个对象,并且都会捕获一个闭包。 即那些在函数体内会被访问的变量。 内存分配(对于函数对象和类)和虚拟调用会引入运行时间开销。

使用 inline 修饰的函数,可以从编译器角度***将函数的函数体复制到调用处实现内联。***

在很多情况下,通过将 Lambda 表达式内联在使用处, 可以消除运行时消耗。

翻看 Kotlin 的 Standard.kt 可以发现它里面的函数 with、apply、run、let 等都使用了 inline。

再举一个例子,对 Closeable 进行扩展,让它支持Java的try-with-resources特性。

inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var closed = false
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
throw e
} finally {
if (!closed) {
this?.close()
}
}
}

该方法已经在 https://github.com/fengzhizi715/SAF-Kotlin-Utils 中

总结

本文是该系列最后一篇文章,未来不会整理零碎的开发细节,转而会以体系化形式进行整理。
该系列的相关文章:
使用Kotlin高效地开发Android App(四)
使用Kotlin高效地开发Android App(三)

最后

这里我特地整理了一份《Android开发核心知识点笔记》,里面就包含了自定义View相关的内容

除了这份笔记,还给大家分享 Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。

分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐