美文网首页
AutoDisposableJob

AutoDisposableJob

作者: CentForever | 来源:发表于2020-12-30 09:29 被阅读0次
import android.view.View
import kotlinx.coroutines.Job

class AutoDisposableJob(private val view: View, wrapped: Job) : View.OnAttachStateChangeListener,
    Job by wrapped {
    init {
        if (isAttached()) {
            view.addOnAttachStateChangeListener(this)
        } else {
            cancel()
        }

        // CF中调用Job的invokeOnCompletion(completionHandler)方法
        invokeOnCompletion {
            view.post {
                view.removeOnAttachStateChangeListener(this)
            }
        }
    }

    override fun onViewAttachedToWindow(v: View?) = Unit

    override fun onViewDetachedFromWindow(v: View?) {
        this.cancel()
        view.removeOnAttachStateChangeListener(this)
    }

  private fun isViewAttached(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT &&
                view.isAttachedToWindow || view.windowToken != null
    }

}

fun Job.autoDispose(view: View) = AutoDisposableJob(view, this)

相关文章

网友评论

      本文标题:AutoDisposableJob

      本文链接:https://www.haomeiwen.com/subject/ovxnnktx.html