Tatsächlicher Kampf der Android-Architekturkomponenten – Lebenszyklus

Hinweis: Bitte beachten Sie den in diesem Artikel enthaltenen Code: Projektquellcode

Lifecycle ist eine von Google eingeführte Architekturkomponente, die zur Wahrnehmung des Lebenszyklus von Komponenten verwendet wird und Nichtkomponentenobjekten die Möglichkeit gibt, den Lebenszyklus wahrzunehmen

Lebenszykluskomponenten werden verwendet, um auf Änderungen im Lebenszyklusstatus einer anderen Komponente wie Aktivität und Fragment zu reagieren. Dies kann dazu beitragen, dass Nicht-Lebenszykluskomponenten mit dem Lebenszyklus von Aktivität, Fragment oder Dienst verknüpft werden, um entsprechende Aufgaben auszuführen Vorgänge in unterschiedlichen Lebenszyklen. Weitere Anweisungen finden Sie im offiziellen Website-Dokument „Lifecycle“ von Google

Bevor ich einen Artikel geschrieben habe „Verwenden von Kotlin + MVP + AndroidX zum Erstellen eines Android-Projektframeworks“ , in dem das MVP-Entwurfsmuster verwendet wurde. Vor der Verwendung von Lifecycle können Sie sehen, dass ich im Presenter eine Reihe von Methoden hinzugefügt habe, die der Aktivität entsprechen. Der Lebenszyklus ist wie folgt:

Basismoderator:

interface BasePresenter {

    fun onCreate()

    fun onStart()

    fun onStop()

    fun onDestory()
}

Dann implementieren Sie MainPresenter konkret:

class MainPresenter(private val mViewBinder: MainViewBinder?) : BasePresenter {

    override fun onCreate() {}

    override fun onStart() {}

    override fun onStop() {}

    override fun onDestory() {}
}

Aufgerufene Aktivität/Fragment:

class MainActivity : BaseActivity(), MainViewBinder {

    private val mMainPresenter = MainPresenter(this)

    override val contentView: Int
        get() = R.layout.activity_main

    override fun initView() {
    }

    override fun initData() {
    }

    override fun onStart() {
        super.onStart()
        mMainPresenter?.onStart()
    }

    override fun onStop() {
        super.onStop()
        mMainPresenter?.onStop()
    }

    override fun onDestroy() {
        super.onDestroy()
        mMainPresenter?.onDestory()
    }
}

In jeder Lebenszyklusmethode ist es notwendig, eine Methodenzuordnung zu schreiben, was überhaupt nicht elegant ist, sodass Lifecycle nach der Verwendung erscheint:

interface BasePresenter : LifecycleObserver {
    //关联onCreate()
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun onCreate(owner: LifecycleOwner)

    //关联onStart()
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onStart(owner: LifecycleOwner)

    //关联onStop()
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onStop(owner: LifecycleOwner)

    //关联onDestroy()
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy(owner: LifecycleOwner)
}
class MainPresenter(private val mViewBinder: MainViewBinder?) : BasePresenter{

    override fun onCreate(owner: LifecycleOwner) {
        LogUtil.i("onCreate()")
    }

    override fun onStart(owner: LifecycleOwner) {
        LogUtil.i("onStart()")
    }

    override fun onStop(owner: LifecycleOwner) {
        LogUtil.i("onStop()")
    }

    override fun onDestroy(owner: LifecycleOwner) {
        LogUtil.i("onDestroy()")
    }
}
class MainActivity : BaseActivity(), MainViewBinder {
    private val mMainPresenter = MainPresenter(this)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //lifecycle(getLifecycle())在AppCompatActivity已经定义了,直接使用
        lifecycle.addObserver(mMainPresenter)//关联起来
    }
}

Auf diese Weise kann Presenter dem Lebenszyklus der Aktivität zugeordnet werden.

Lassen Sie uns über die zu verwendenden Schritte sprechen:

1. Abhängigkeiten einführen:

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'

Wenn Ihr Projekt den Bucket der Androidx-Familie nicht verwendet, können Sie Folgendes auch separat zitieren:

implementation "android.arch.lifecycle:common-java8:1.1.0"

2. Die zugehörigen Objekte müssen die LifecycleObserver-Schnittstelle implementieren

class MainPresenter() : LifecycleObserver{}

Es gibt zwei Methoden:

  • Implementieren Sie die DefaultLifecycleObserver-Schnittstelle und schreiben Sie dann die darin enthaltene Lebenszyklusmethode neu. Androidx verfügt standardmäßig nicht über diese und muss die Common-Java8-Version einführen
  • Implementieren Sie die LifecycleObserver-Schnittstelle und empfangen Sie dann Änderungen im Lebenszyklus über Anmerkungen.

Ich habe in den Quellcode meines Projekts zwei Möglichkeiten geschrieben, Sie können es selbst überprüfen

3. Fügen Sie die entsprechende @OnLifecycleEvent-Annotation in der Methode des Objekts hinzu:

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate() {
    LogUtil.i("onCreate()")
}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
    LogUtil.i("onStart()")
}

4. Aktivität/Fragment aufrufen:

 lifecycle.addObserver(mMainPresenter)//关联起来

Wenn MainActivity startet, lautet das Protokoll:

2019-11-28 10:18:58.293 16238-16238/com.king.frame I/king: onCreate()
2019-11-28 10:18:58.298 16238-16238/com.king.frame I/king: onStart()

Beim Zerstören:

2019-11-28 10:19:08.092 16238-16238/com.king.frame I/king: onStop()
2019-11-28 10:19:08.094 16238-16238/com.king.frame I/king: onDestroy()

So einfach ist das.

Supongo que te gusta

Origin blog.csdn.net/gs12software/article/details/103288649
Recomendado
Clasificación