Il y avait une idée. Rassemblez un groupe de variables importantes en un seul endroit afin qu'ensemble, elles deviennent quelque chose de plus. Et si nécessaire, ils peuvent être utilisés lorsque le programmeur a besoin de valeurs qui ne dépendent pas des cycles de vie et de la libération de mémoire des applications minimisées.
Idée
L'idée est venue d'un problème. Le problème venait du ressentiment.
, , , .
, , .
, -, , , . "" . ?
. , , , : , , .
...
? , : bundle ..
? , , ?
, - , -, . , .
SavedStateHandle MVVM. .
()
, , . @Unkillable
:
@Unkillable
data class SampleFragmentState(
val testValue: Double,
val testLiveData: MutableLiveData<Double>
) : EmptyState()
ViewModel. , AndroidViewModel, ViewModel.
class SampleViewModel(
application: Application,
savedStateHandle: SavedStateHandle
) : AndroidStateViewModel(application, savedStateHandle) {
override fun provideState() = createState<UnkillableSampleFragmentState>()
}
UnkillableSampleFragmentState .
, ViewModel , . , Google SavedStateHandle.
activity?.application?.let { application ->
viewModel = ViewModelProvider(this, SavedStateViewModelFactory(application, this))
.get(SampleViewModel::class.java)
}
.
init {
// get values example
Log.d("StateLog", "0 value ${state.testValue}")
Log.d("StateLog", "1 value ${state.testLiveData?.value}")
}
fun onSetDataClicked() {
// set values example
state.testValue = 2.2
state.updateTestLiveDataValue(3.3) // yourLiveData.value = 3.3
state.postUpdateTestLiveDataValue(3.3) // yourLiveData.postValue(3.3)
}
, .
Le but de cette bibliothèque est de simplifier le développement et de décharger le développeur de l'écriture de code, à condition qu'il travaille avec la préservation de l'état de l'application. Nous avons également réussi à nettoyer le code de toutes ces variables qui doivent être sauvegardées. De plus, ils sont maintenant séparés logiquement de la masse générale et n'encombrent pas le code, ce qui est plutôt sympa. Cependant, pour l' instant, cela ne fonctionne que dans MVVM de Google.
Lien du référentiel GitHub UnkillableSavedState