分类 移动端 下的文章

Lifecycle

Lifecycle应用

一般不需要指定依赖,我们只需要依赖implementation 'androidx.appcompat:appcompat:1.4.1'即可。如果需要指定特定的Lifecycle依赖,可以参考这里:https://developer.android.com/jetpack/androidx/releases/lifecycle

使用Lifecycle解耦页面组件

可以为方法添加@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)此类注解实现,不过该方式已经被废弃,替代方案:DefaultLifecycleObserver or LifecycleEventObserver

使用LifecycleService解耦Service与组件

adb geo设置GPS位置方法:adb -s emulator-5554 emu geo fix 121.4961236714487 31.24010934431376

使用ProcessLifecycleOwner监听应用程序生命周期
//依赖
implementation 'androidx.lifecycle:lifecycle-process:2.4.1'
//定义CustomObserver
class CustomObserver : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume() {
    }
}
//使用
ProcessLifecycleOwner.get().lifecycle.addObserver(CustomObserver())

特点:

  1. 针对整个应用程序的监听,与Activity数量无关;
  2. Lifecycle.Event.ON_CREATE只会被调用一次,Lifecycle.Event.ON_DESTROY永远不会被调用。

Lifecycle的好处

  1. 帮助开发者建立可感知生命周期的组件;
  2. 组件在其内部管理自己的生命周期,从而降低模块耦合度;
  3. 降低内存泄漏发生的可能性;
  4. Activity、Fragment、Service、Application均有Lifecycle支持。

- 阅读剩余部分 -

协程是什么

协程让异步逻辑同步化,杜绝回调地狱。协程最核心的点就是,函数或者一段程序能够被挂起,稍后再在挂起的位置恢复。kotlin中的协程基于线程,它是轻量级线程。

挂起与恢复

协程新增了suspend和resume:

  • suspend:也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量;
  • resume:用于让已暂停的协程从其暂停处继续执行。

使用suspend关键字修饰的函数叫作挂起函数。挂起函数只能在协程体内或其他挂起函数内调用。

- 阅读剩余部分 -

kotlin基础

字符串比较

在kotlin中,用==检查两个字符串中的字符是否匹配,用===检查两个变量是否指向内存堆上同一对象。

fun main() {
    val str1 = "Jason"
    val str2 = "Jason"
    println(str1 === str2) //输出true,因为字符串常量池
    val str2 = "jason".capitalize()
    println(str1 === str2) //输出false,因为capitalize方法创建了一个新的"Jason"
    val str2 = "jason".capitalize().intern()
    println(str1 === str2) //输出true,因为intern方法将capitalize方法创建的字符串放进了字符串常量池,并返回了字符串常量池中该字符串的引用
}

解构

解构声明的后台实现就是声明component1、component2等若干个组件函数,让每个函数负责管理你想返回的一个属性数据,如果你定义一个数据类,它会自动为所有定义在主构造函数的属性添加对应的组件函数。

const val str = "aa,bb,cc"
fun main() {
    val (a,b,c) = names.split(",") //输出aa bb cc
    val (a) = names.split(",") //输出aa
    val data = names.split(",") //输出[aa,bb,cc]
}
可变参数
fun test(vararg str: String) {
    println(str.size) //输出2
}
fun main() {
    test("1", "2")
}

- 阅读剩余部分 -