Milliseid mehhanisme saab kasutada presenterist päringute tühistamiseks?
sobes.tech AI
Vastus AI-lt
-
Surnud View: Esitaja ei hoia otse viidet View-ile, vaid saab selle interface'i kaudu kutsumise hetkel. Kui View enam ei eksisteeri, ei toimu kutsungit.
-
Seisundi lipud: View'is võib hoida lipu, mis näitab, kas see on aktiivne. Enne tegevuse teostamist, mis nõuab View'i, kontrollib esitaja seda lippu.
-
RxJava tellimusest loobumine: Kui suhtlemiseks kasutatakse Observable/Flowable, saab juhtida tellimust ja sellest loobuda View'i hävitamisel.
// Esitajas private var disposable: Disposable? = null fun loadData() { disposable = model.getData() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ data -> view?.showData(data) // Null kontroll }, { error -> view?.showError(error) // Null kontroll }) } fun detachView() { disposable?.dispose() // Tellimusest loobumine View'i hävitamisel view = null // Viite nullimine } -
Tagasikutsumine View'i kontrolliga: Edastada tagasikutses objekt, mis kontrollib sees, kas View eksisteerib, enne tegevuse teostamist.
// Esitajas fun processData(data: Data) { val uiCallback = object : UICallback { override fun onSuccess(result: Result) { view?.showResult(result) // Null kontroll } override fun onError(error: Throwable) { view?.showError(error) // Null kontroll } } model.doAsyncOperation(data, uiCallback) } // View'is interface UICallback { fun onSuccess(result: Result) fun onError(error: Throwable) } -
Elu tsüklile teadlikud komponendid: Kasutada selliseid komponente, mis on teadlikud elutsüklist (näiteks Android arhitektuuri komponentide LifecycleObserver), et automaatselt tühistada päringud View'i oleku muutmisel.
// Esitaja, mis on LifecycleObserver class MyPresenter(private val view: MyView) : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroy() { // Operatsioonide tühistamine View'i hävitamisel } // ... } // View'is lifecycle.addObserver(presenter)