利用协程对postDelayed进行改造
- 在Android开发中不可避免的会遇到延迟执行的一些场景,通常的用法是
new Handler(Looper.getMainLooper()).postDelayed(runnable, delay);
但是这样会存在当fragment、activity销毁后,延迟任务仍然执行的问题,所以需要对postDelayed进行改造。
首先利用Kotlin 的拓展函数,对fragment、activity进行扩展.
inline fun BaseActivity.postDelayedSafe(delayed: Int, crossinline f: suspend () -> Unit) { (this as LifecycleOwner).lifecycleScope.launch(Dispatchers.Main) { delay(delayed.toLong()) f() } }
然后将原有的postDelayed方法改为对postDelayedSafe 的调用
这样利用Kotlin携程job支持取消的特性,对postDelayed进行改造,当fragment、activity销毁后,延迟任务不再执行避免了空指针和内存泄漏问题。