android10 / android10/Android-CleanArchitecture-Kotlin

How to auto cancel UseCase job when the ViewModel is destroyed

オープン
#118 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Kotlin
スター
4.8k
フォーク
929
PR マージ指標
30日以内にマージされた PR はありません

説明

I want to auto cancel all UseCase request that is tied to the ViewModel.

For now: I have reigstered a callback for `ViewModel.onCleared()` event. So when the `onCleared()` is called, the callback will be invoked.

````
class BaseViewModel : ViewModel(){
internal var onClearedListener : () -> Unit ={}
override fun onCleared() {
super.onCleared()
onClearedListener.invoke()
}
}
````
For UseCase: I have defined two more functions, `cancelJob()` and `monitorViewModelLifecycle(vm: BaseViewModel)` and added another overloading function `invoke(vm: BaseViewModel,params: Params,onResult: (Either) -> Unit = {})`.

````
abstract class UseCase where Type : Any {
operator fun invoke(
vm: BaseViewModel,
params: Params,
onResult: (Either) -> Unit = {}
) {
monitorViewModelLifecycle(vm)
uiScope.launch { onResult(withContext(Dispatchers.IO) { run(params) }) }
}

//Cancel the current ongoing job
fun cancelJob(message: String = "Abort") {
uiScope.cancel(message)
}

/**
* Monitor the [BaseViewModel] lifecycle.
* The motto is to auto clear any ongoing job that is tied to the [BaseViewModel].
*
* @param vm, [BaseViewModel] instance
*/
fun monitorViewModelLifecycle(vm: BaseViewModel) {
vm.onClearedListener = {
cancelJob()
}
}
}
````

So, When the `ViewModel.onClearedListener` is invoked I'm cancelling the current Job.

Is there any better to way to acheive this?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。