Middle
Presenter-dən view-ə olan sorğuları ləğv etmək üçün hansı mexanizmlər istifadə oluna bilər?
sobes.tech Süni İntellekt
AI-dan cavab
- Ölü View: Prezentator, View-ə birbaşa istinad saxlamır, onu çağırış zamanı interfeys vasitəsilə alır. Əgər View artıq mövcud deyilsə, çağırış sadəcə baş vermir.
- Vəziyyət bayraqları: View-də aktiv olub-olmadığını göstərən bayraq saxlamaq olar. View üçün hərəkət etməzdən əvvəl, prezentator bu bayrağı yoxlayır.
- RxJava abunəliyindən çıxma: Əgər qarşılıqlı əlaqə üçün Observable/Flowable istifadə olunursa, abunəliyi idarə etmək və View-un məhv edilməsində abunəliyi ləğv etmək olar.
// Prezentatda
private var disposable: Disposable? = null
fun loadData() {
disposable = model.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ data ->
view?.showData(data) // Null yoxlaması
}, { error ->
view?.showError(error) // Null yoxlaması
})
}
fun detachView() {
disposable?.dispose() // View-un məhv edilməsində abunəliyi ləğv et
view = null // View-ə istinadın null olması
}
- View yoxlaması ilə callback: Əməliyyatdan əvvəl View-in mövcudluğunu yoxlayan obyektə callback kimi ötürmək.
// Prezentatda
fun processData(data: Data) {
val uiCallback = object : UICallback {
override fun onSuccess(result: Result) {
view?.showResult(result) // Null yoxlaması
}
override fun onError(error: Throwable) {
view?.showError(error) // Null yoxlaması
}
}
model.doAsyncOperation(data, uiCallback)
}
// View-də
interface UICallback {
fun onSuccess(result: Result)
fun onError(error: Throwable)
}
- Həyat dövrü ilə əlaqəli komponentlər: Android arxitektura komponentlərindəki LifecycleObserver kimi, View-in vəziyyət dəyişiklikləri zamanı sorğuları avtomatik ləğv etmək üçün istifadə edilən həyat dövrü ilə əlaqəli komponentlər.
// Prezentatda, LifecycleObserver olan
class MyPresenter(private val view: MyView) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
// View-in məhv edilməsində əməliyyatları ləğv et
}
// ...
}
// View-də
lifecycle.addObserver(presenter)