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