Android Arsenal – Architektur

­čî│ Mit dem ViewModel-Lebenszyklus k├Ânnen Sie ├änderungen im Lebenszyklus des Jetpack-ViewModel ├╝berwachen und beobachten.
Es unterst├╝tzt auch n├╝tzliche Erweiterungsfunktionen f├╝r RxKotlin / RxJava und Korutine.

Einschlie├člich Ihres Projekts

Gradl

F├╝gen Sie den unten stehenden Code zu Ihrem eigenen hinzu Wurzel build.gradle Datei (nicht Ihr build.gradle-Dateimodul):

allprojects {
    repositories {
        mavenCentral()
    }
}

F├╝gen Sie dann die unten stehende Abh├Ąngigkeit zu Ihrer eigenen hinzu Modul‘S build.gradle Datei:

dependencies {
    implementation "com.github.skydoves:viewmodel-lifecycle:1.1.0"
}

SCHNAPPSCHUSS


Snapshots der aktuellen Entwicklungsversion von ViewModel-Lifecycle, die folgen, sind verf├╝gbar die neuesten Versionen.

repositories {
   maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}

Benutzen

ViewModel-Lifecycle erm├Âglicht es Ihnen, zwei Lebenszyklus├Ąnderungen zu beobachten: initialisiert ich gereinigt.

ViewModelLifecycleOwner

ViewModelLifecycleOwner ist der Besitzer eines erweiterbaren Lebenszyklus f├╝r das Jetpack ViewModel LifecycleOwner. Es ├╝berwacht und stellt Lebenszykluszust├Ąnde f├╝r ViewModels bereit. Du kannst es bekommen ViewModelLifecycleOwner aus Ihrem ViewModel wie folgt:

class MyActivity : AppCompatActivity() {

  private val viewModel by viewModels<MyViewModel>()

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    
    val viewModelLifecycleOwner = viewModel.viewModelLifecycleOwner
...

Sie k├Ânnen es auch wie folgt direkt in Ihr ViewModel ├╝bertragen:

class MyViewModel : ViewModel() {

  val lifecycleOwner = viewModelLifecycleOwner
}

ViewModelLifecycleOwner f├╝r LiveData

Sie k├Ânnen es auch verwenden, um Ihre eigenen zu beobachten Lebensdaten mit ViewModelLifecycleOwner gem├Ą├č dem ViewModel-Lebenszyklus. Wenn der Lebenszyklus in den gel├Âschten Zustand versetzt wird, wird der Beobachter automatisch entfernt.

class MyViewModel : ViewModel() {

  private val liveData = MutableLiveData<String>()

  init {
    val lifecycleOwner = liveData.observe(viewModelLifecycleOwner) {
      // sometihng
    }
  }
}

Hinweis: Wenn Sie verwenden ViewModelLifecycleOwner Um Ihre LiveData zu beobachten, erhalten Beobachter jedes Ereignis, bevor der Lebenszyklus in den gel├Âschten Zustand ├╝bergeht. Sie erhalten jedoch keine weiteren Ereignisse durch Freizeitaktivit├Ąten wie Bildschirmdrehung. Stellen Sie also sicher, welche lifecycleOwner ist die beste L├Âsung.

ViewModelLifecycle

ViewModelLifecycle ist die Umsetzung Lebenszyklusdie dem Lebenszyklus des ViewModel folgt. ViewModelLifecycle mehrfach verarbeitet LifecycleObserver wie zum Beispiel ViewModelLifecycleObserver um den ViewModel-Lebenszyklus zu ├╝berwachen. ViewModelLifecycle geh├Ârt ViewModelLifecycleOwnerund Sie k├Ânnen es direkt von erhalten [ViewModelLifecycleOwner] folgenderma├čen:

val viewModelLifecycle = viewModelLifecycleOwner.viewModelLifecycle

ViewModelLifecycle Observer

Sie k├Ânnen ├änderungen im Lebenszyklus nachverfolgen ViewModelLifecycle mit addViewModelLifecycleObserver Verl├Ąngerung wie folgt:

viewModel.viewModelLifecycleOwner.addViewModelLifecycleObserver { viewModelState ->
  when (viewModelState) {
    ViewModelState.INITIALIZED -> // viewModel was initialized
    ViewModelState.CLEARED -> // viewModel was cleraed
  }
}

Sie k├Ânnen auch ├änderungen im Lebenszyklus beobachten ViewModelLifecycle mit addObserver folgenderma├čen:

viewModelLifecycleOwner.lifecycle.addObserver(
  object : DefaultViewModelLifecycleObserver {
    override fun onInitialized(viewModelLifecycleOwner: ViewModelLifecycleOwner) {
        // viewModel was initialized
    }

    override fun onCleared(viewModelLifecycleOwner: ViewModelLifecycleOwner) {
        // viewModel was cleraed
    }
  }
)

Sie k├Ânnen auch Ihre eigenen benutzerdefinierten Lifecycle Observer-Klassen implementieren DefaultViewModelLifecycleObserver ich FullViewModelLifecycleObserver Schnittstellen.

ViewModel-Lebenszyklus f├╝r RxKotlin (RxJava)

ViewModel Lifecycle bietet n├╝tzliche Erweiterungen f├╝r RxKotlin (RxJava).

Gradl

F├╝gen Sie die Sucht unten Ihrer eigenen hinzu Modul build.gradle Datei:

dependencies {
    // RxKotlin3 (RxJava3)
    implementation "com.github.skydoves:viewmodel-lifecycle-rxkotlin3:$version"

    // RxKotlin2 (RxJava2)
    implementation "com.github.skydoves:viewmodel-lifecycle-rxkotlin2:$version"
}

AutoDisposable

Mit autoDisposable Erweiterung k├Ânnen Sie eine erstellen Disposable Delegieren Sie die anzurufende Eigenschaft dispose() funktionieren automatisch, wenn das ViewModel wie folgt gel├Âscht wird:

class MyViewModel : ViewModel() {

  // dispose CompositeDisposable automatically when viewModel is getting cleared
  val compositeDisposable by autoDisposable(CompositeDisposable())
}

Der autoDisposable Die Erweiterung erstellt eine schreibgesch├╝tzte Eigenschaft, die sie empf├Ąngt Disposable Schnittstelle als Anfangswert.

ViewModel-Lebenszyklus f├╝r Volumenk├Ârper

ViewModel-Lifecycle unterst├╝tzt auch Bits zum Verfolgen und Beobachten von ViewModel-Lebenszyklus├Ąnderungen.

Gradl

F├╝gen Sie die Sucht unten Ihrer eigenen hinzu Modul build.gradle Datei:

dependencies {
    implementation "com.github.skydoves:viewmodel-lifecycle-coroutines:$version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2"
}

ViewModelLifecycle-Ablauf

Sie k├Ânnen Lebenszyklus├Ąnderungen als Flow with beobachten viewModelLifecycleFlow Verl├Ąngerung wie folgt:

class MyInteractor(
  private val viewModelLifecycleOwner: ViewModelLifecycleOwner
) : CoroutineScope {

  override val coroutineContext: CoroutineContext = SupervisorJob() + Dispatchers.Main

  init {
    launch(coroutineContext) {
      viewModelLifecycleOwner.viewModelLifecycleFlow().collect { viewModelState ->
        when (viewModelState) {
          ViewModelState.INITIALIZED -> // ViewModel was initialized.
          ViewModelState.CLEARED -> {
            // ViewModel was cleared.
            coroutineContext.cancel() // cancel the custom scope.
          }
        }
      }
    }
  }
}

Stellen Sie sicher, dass Sie Ihre Gewohnheit stornieren CoroutineScope nach Beobachtung ViewModelState.CLEAREDich die viewModelLifecycleFlow Erweiterung muss laufen haupts├Ąchlich Faden.

Ist diese Bibliothek n├╝tzlich f├╝r Sie? ÔŁĄ´ŞĆ

Unterst├╝tzen Sie dies durch Ihren Beitritt Sterngucker f├╝r dieses Depot. ÔşÉ
ich Folgen mich f├╝r meine n├Ąchsten Kreationen! ­čĄę

Copyright 2022 skydoves (Jaewoong Eum)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the L