Es gab eine Idee. Sammeln Sie eine Gruppe wichtiger Variablen an einem Ort, damit sie zusammen etwas mehr werden. Bei Bedarf können sie verwendet werden, wenn der Programmierer Werte benötigt, die nicht von den Lebenszyklen und der Speicherfreigabe minimierter Anwendungen abhängen.
Idee
Die Idee kam von einem Problem. Das Problem entstand aus Ressentiments.
, , , .
, , .
, -, , , . "" . ?
. , , , : , , .
...
? , : 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)
}
, .
Der Zweck dieser Bibliothek besteht darin, die Entwicklung zu vereinfachen und den Entwickler vom Schreiben von Code zu entlasten, vorausgesetzt, er arbeitet mit der Beibehaltung des Anwendungsstatus. Wir haben es auch geschafft, den Code von all diesen Variablen zu bereinigen, die gespeichert werden müssen. Außerdem sind sie jetzt logisch von der allgemeinen Masse getrennt und überladen den Code nicht, was ziemlich gut aussieht. Aber für jetzt, es funktioniert nur in MVVM von Google.
UnkillableSavedState GitHub Repository Link