Android Arsenal – Architektur
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, welchelifecycleOwner
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 ViewModelLifecycleOwner
und 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.CLEARED
ich 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