Sobes.tech
Middle

რომელ მექანიზმებს შეიძლება გამოიყენოს presenter-დან view-ის მოთხოვნების გაუქმებისთვის?

sobes.tech AI

პასუხი AI-სგან

  • මියගිය View: ප්‍රසෙන්ටරය View එකට සෘජු සබැඳියක් නොවෙයි, එය අතුරුමුහුණතක් මඟින් ලබා ගනී මොහොතකට ඇමතුමක් කළ විට. View එක තවම නොමැති නම්, ඇමතුම සරලව නොකළ හැක.

  • තත්ව ලාංඡන: View තුළ එය සක්‍රීයද යන්න පෙන්වන්න ලාංඡනයක් තබා ගත හැක. View සඳහා ක්‍රියාවක් කිරීමට පෙර, ප්‍රසෙන්ටරය එය පරීක්ෂා කරයි.

  • RxJava අත්සන් ඉවත් කිරීම: අන්තර්ක්‍රියාවන් සඳහා Observable/Flowable භාවිතා කරන්නේ නම්, එහි අත්සන් කළ යුතු අතර, View මැකෙන්නේ විට එය අත්සන් ඉවත් කළ හැක.

    // ප්‍රසෙන්ටරයේ
    private var disposable: Disposable? = null
    
    fun loadData() {
        disposable = model.getData()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ data ->
                view?.showData(data) // null පරීක්ෂාව
            }, { error ->
                view?.showError(error) // null පරීක්ෂාව
            })
    }
    
    fun detachView() {
        disposable?.dispose() // View මැකෙන්නේ විට අත්සන් ඉවත් කිරීම
        view = null // සබැඳිය null කරන්න
    }
    
  • Callback සමඟ View පරීක්ෂාව: Callback වශයෙන් වස්තුවක් ලබා දීම, එය තුළ View පවතිනද යන්න පරීක්ෂා කර ක්‍රියාව සිදු කරයි.

    // ප්‍රසෙන්ටරයේ
    fun processData(data: Data) {
        val uiCallback = object : UICallback {
            override fun onSuccess(result: Result) {
                view?.showResult(result) // null පරීක්ෂාව
            }
            override fun onError(error: Throwable) {
                view?.showError(error) // null පරීක්ෂාව
            }
        }
        model.doAsyncOperation(data, uiCallback)
    }
    
    // View තුළ
    interface UICallback {
        fun onSuccess(result: Result)
        fun onError(error: Throwable)
    }
    
  • ජීවිත චක්‍රය දැනගන්නා සංරචක: ජීවිත චක්‍රය දැනගන්නා සංරචක භාවිතා කිරීම (උදාහරණයක් ලෙස, Android ආරක්ෂක සංරචකවල LifecycleObserver), View තත්වය වෙනස් වීමේදී ස්වයංක්‍රීයව ඉල්ලීම් අහෝසි කිරීම.

    // ජීවිත චක්‍රය දැනගන්නා, LifecycleObserver වන ප්‍රසෙන්ටර
    class MyPresenter(private val view: MyView) : LifecycleObserver {
    
        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        fun onDestroy() {
            // View මැකෙන්නේ විට ක්‍රියා මකා දැමීම
        }
    
        // ...
    }
    
    // View තුළ
    lifecycle.addObserver(presenter)