一、Lifecycle的基本使用
1. 使用方式一
MyListener.kt
package com.example.mylifecycle.use1
import android.util.Log
class MyListener {
private val TAG = "MyListener"
fun start() = Log.d(TAG, "start run...")
fun stop() = Log.d(TAG, "stop run...")
}
MainActivity.kt
package com.example.mylifecycle.use1
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.mylifecycle.R
// TODo 第一个版本 监听器监听生命周期
class MainActivity : AppCompatActivity() {
private var myListener : MyListener? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myListener = MyListener()
}
override fun onStart() {
super.onStart()
myListener?.start()
}
override fun onStop() {
super.onStop()
myListener?.stop()
}
}
2. 使用方式二
MyPresenter.kt
package com.example.mylifecycle.use2
import android.util.Log
class MyPresenter {
private val TAG = "MyPresenter"
fun onResume() = Log.d(TAG, "onResume run ...")
fun onPause() = Log.d(TAG, "onPause run ...")
}
MainActivity.kt
package com.example.mylifecycle.use2
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.mylifecycle.R
// TODO 第二个版本 MVP
class MainActivity : AppCompatActivity() {
private var myPresenter : MyPresenter ?= null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myPresenter = MyPresenter()
}
override fun onResume() {
super.onResume()
myPresenter?.onResume()
}
override fun onPause() {
super.onPause()
myPresenter?.onPause()
}
}
3. 使用方式三
MyObserver.kt
package com.example.mylifecycle.use3
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
// 观察者
class MyObserver : LifecycleObserver {
private val TAG = "MyObserver"
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) // 画面可见 就连接
fun connectListener() = Log.d(TAG, "connectListener run ...")
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) // 画面不可见 就断开连接
fun disConnectListener() = Log.d(TAG, "disConnectListener run...")
}
MyObserver2.kt
package com.example.mylifecycle.use3
import android.util.Log
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
// DefaultLifecycleObserver 就是对LifecycleObserver 二次封装 为了用户好用
class MyObserver2 : DefaultLifecycleObserver {
private val TAG = "MyObserver2"
override fun onCreate(owner: LifecycleOwner) {
//super.onCreate(owner)
Log.d(TAG, "onCreate on ...")
}
override fun onResume(owner: LifecycleOwner) {
//super.onResume(owner)
Log.d(TAG, "onResume run ...")
}
override fun onPause(owner: LifecycleOwner) {
//super.onPause(owner)
Log.d(TAG, "onPause run ...")
}
}
MainActivity.kt
package com.example.mylifecycle.use3
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
// TODO 第三个版本 LifecycleObserver
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 一般是在BaseActivity 关联注册
// 观察者 与 被观察者 关联的环节
lifecycle.addObserver(MyObserver())
lifecycle.addObserver(MyObserver2())
}
}
4. 使用版本四
package com.example.mylifecycle.use4
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import com.example.mylifecycle.R
// TODO 第四个版本 内部类监听
class MainActivity : AppCompatActivity() {
private val TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
inner class MyObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume() {
Log.d(TAG, "Lifecycle call onResume ...")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause() {
Log.d(TAG, "Lifecycle call onPause ...")
}
}
}```