Aké mechanizmy je možné použiť na zrušenie požiadaviek od presenter k view?
sobes.tech AI
Odpoveď od AI
-
Mŕtvy View: Prezentér ne uchováva priamu odkaz na View, ale získava ju cez rozhranie v momente volania metódy. Ak View už neexistuje, volanie sa jednoducho nevykoná.
-
Prvky stavu: Vo View je možné uchovávať príznak, ktorý indikuje, či je aktívne. Pred vykonaním akcie vyžadujúcej View, prezentér skontroluje tento príznak.
-
Odhlásenie RxJava: Ak sa na interakciu používajú Observable/Flowable, je možné spravovať odber a odhlásiť sa pri zničení View.
// V prezentéri private var disposable: Disposable? = null fun loadData() { disposable = model.getData() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ data -> view?.showData(data) // Kontrola na null }, { error -> view?.showError(error) // Kontrola na null }) } fun detachView() { disposable?.dispose() // Odhlásenie pri zničení View view = null // Nulovanie odkazu na View } -
Callback s kontrolou View: Prenášať ako callback objekt, ktorý vo vnútri kontroluje existenciu View pred vykonaním akcie.
// V prezentéri fun processData(data: Data) { val uiCallback = object : UICallback { override fun onSuccess(result: Result) { view?.showResult(result) // Kontrola na null } override fun onError(error: Throwable) { view?.showError(error) // Kontrola na null } } model.doAsyncOperation(data, uiCallback) } // V View interface UICallback { fun onSuccess(result: Result) fun onError(error: Throwable) } -
Komponenty, ktoré sú si vedomé životného cyklu: Použitie komponentov, ktoré sú si vedomé životného cyklu (napr. LifecycleObserver v architektonických komponentoch Android), na automatické zrušenie požiadaviek pri zmene stavu View.
// V prezentéri, ktorý je LifecycleObserver class MyPresenter(private val view: MyView) : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroy() { // Zrušenie operácií pri zničení View } // ... } // V View lifecycle.addObserver(presenter)