监听activity和fragment的销毁事件,在视图销毁时会调用onCleared(),可以用来清除缓存数据和取消异步请求,避免内存泄漏,防止回调null视图对象。
class MainActivity : AppCompatActivity() {
//将ViewModel添加到activity的生命周期管理
private val viewModel by lazy { ViewModelProviders.of(this)[MainViewModel::class.java] }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel.callback = {
button.text = it
}
button.setOnClickListener {
//获取数据
viewModel.get()
finish()
}
}
}
class MainViewModel : ViewModel() {
var callback: ((s: String) -> Unit)? = null
fun get() {
//异步获取数据
Handler(Looper.getMainLooper()).postDelayed({
callback?.invoke("ok")
}, 2000)
}
override fun onCleared() {
super.onCleared()
//当activity或fragment被销毁时清除回调
callback = null
}
}