Sobes.tech
Middle

Presenter'dan view'e yapılan istekleri iptal etmek için hangi mekanizmalar kullanılabilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

  • Ölü Görünüm: Presenter, Görünüm'e doğrudan bir referans tutmaz, onu çağrı sırasında bir arayüz aracılığıyla alır. Eğer Görünüm artık mevcut değilse, çağrı sadece gerçekleşmez.
  • Durum bayrakları: Görünümde, aktif olup olmadığını gösteren bir bayrak saklanabilir. Görünüm gerektiren bir işlem yapılmadan önce, presenter bu bayrağı kontrol eder.
  • RxJava abonelikten çıkma: Etkileşimler Observable/Flowable kullanıyorsa, aboneliği yönetebilir ve Görünüm yok edildiğinde abonelikten çıkabilirsiniz.
// Presenter'da
private var disposable: Disposable? = null

fun loadData() {
    disposable = model.getData()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({ data ->
            view?.showData(data) // null kontrolü
        }, { error ->
            view?.showError(error) // null kontrolü
        })
}

fun detachView() {
    disposable?.dispose() // Görünüm yok edilirken abonelikten çıkma
    view = null // Görünüm referansını sıfırla
}
  • Görünüm kontrolü ile geri çağırma: Geri çağırma olarak, içinde Görünüm'ün varlığını kontrol eden bir nesne geçmek.
// Presenter'da
fun processData(data: Data) {
    val uiCallback = object : UICallback {
        override fun onSuccess(result: Result) {
            view?.showResult(result) // null kontrolü
        }
        override fun onError(error: Throwable) {
            view?.showError(error) // null kontrolü
        }
    }
    model.doAsyncOperation(data, uiCallback)
}

// Görünüm'de
interface UICallback {
    fun onSuccess(result: Result)
    fun onError(error: Throwable)
}
  • Yaşam döngüsü farkında bileşenler: Android mimari bileşenlerindeki LifecycleObserver gibi, görünümün durum değişiklikleri sırasında otomatik olarak istekleri iptal etmek için kullanılan yaşam döngüsü farkında bileşenlerin kullanılması.
// LifecycleObserver olan Presenter'da
class MyPresenter(private val view: MyView) : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy() {
        // Görünüm yok edilirken işlemleri iptal et
    }

    // ...
}

// Görünüm'de
lifecycle.addObserver(presenter)