1.单例:
将class替换成object
2.高阶函数
定义:如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,就被称为高阶函数
3.顶层方法
创建一个.kt的文件
4.协程
同一个线程实现多线程的效果
5.扩展函数
最好定义在顶层方法,结构:classname.methname()
6.密封类
sealed class 密封类
7.标准函数和静态方法
8.内联函数
inine关键字 (如果参数有函数,尽量使用inine关键字,这样内部会做优化,减少函数对象的开辟)
noinline关键字
crossinline 关键字
优点:每次lambda表达式都会创建一个匿名实例,会造成额外的内存和性能开销,
inline内联函数只允许传给另外一个内联函数,可以进行函数返回,
noinline内联函数可以自由的传给其他任何函数,只能进行局部返回
crossinline 一个契约,保证内联函数不会使用return关键字
(1),如果函数中使用lambda作为参数,需要声明成内联函数否则会造成性能损耗
9.泛型和委托
类委托:by关键字
委托属性:by关键字 ,一个属性字段的实现托给另一个类去完成(新建委托属性类)
10.infix函数
可以使代码根据可读性配合拓展函数
11.泛型的高级特性:
(1).泛型实例化应用:
(2).泛型的协变
(3).泛型的逆变
- 协程
允许在单线程下模拟多线程
globalScope.launch 每次创建的都是一个顶层协程
runblocking 一般测试环境下使用
suspend关键字 可以将函数挂起
coroutinescope 可以保证其作用域内的代码和自协程执行完成之前一直会阻塞当前协程
async函数必须在协程作用域当中才能调用
withContext()函数是一个挂起函数,可以理解为async的一种简化版
suspendCoroutine函数可以简化回调方法
13.jetpack
viewmode模块:写一个类继承viewmode类 (Mainviewmode.class) ,此类生命周 期大于activity可以 保存界面数据
第一:创建viewmode的实例:通过viewmodeproviders.of(this).get()获取实例
第二:向viewmode传递参数:通过创建viewmodeprovider.factory类的实例 (Mainviewmodefactory.class),写一个类继承viewmodeprovider.factory,重写 viewmodeprovider.factory实例类的oncreat方法,在方法中初始化 Mainviewmode.class类
代码:viewmodeprovider.of(this,Mainviewmodefactory("数据")).get() lifecycles模块组件:可以轻松获取activity当前的生命周期
创建lifecycleobserver的实例类,写一个类继承lifecycleobserver
借助注解@OnLifecycleEvent(Lifecycle..Event.ON_START)
关联activity方法:lifecycle.addobserver(myobserver())
livedata模块组件:
14.WorkManager