我有一个应用程序,里面有我正在做的一些课程的进度条。 我可以修改进度,但我希望每次关闭应用程序时都保存该应用程序的状态,而不是每次都从0重新启动。 我怎么能这么做呢?
根据评论中给出的官方文档,为了在应用程序中保留状态,您有三个选项:
因为ViewModel和保存的实例状态都没有长期存储数据(我假设您正在尝试这样做),所以您的唯一选择是使用持久存储。
根据您的描述,您将从您的进度条存储简单的数值。 您应该签出SharedPreference
。
1-您可以使用SharedPrefences
保存进度,文档
2-您可以将其保存到activity提供的bundle
中,但是如果您有太多的数据需要保存,可以考虑使用持久的RoomDatabase,也可以使用ViewModel和liveData与Room一起使用,并让ViewModel为您管理activity状态
例如:
val key = "progress_state"
// read from shared preferences when starting your app
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
// using default provided bundle
val defValue = -1
if (savedInstanceState.getInt(key,defValue) != defValue){
// TODO: update your ui
}
// using sharedPreferences
if(read(key,defValue) != defValue){
// TODO: update your ui
}
}
// save the progress into shared preferences
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// using SharedPreferences
val progress = reycler.progress
save(key,progress)
// using default provided bundle
outState.putInt(key,progress)
}
// save valued
fun save(key: String, value: Int) {
val sharedPref =
context.getSharedPreferences("SHARED_PREFERENCES_NAME", Context.MODE_PRIVATE) ?: return
with(sharedPref.edit()) {
putInt(key, value)
commit()
}
}
// get value
fun read(key: String, defValue: Int): Int {
val sharedPref =
context.getSharedPreferences("SHARED_PREFERENCES_NAME", Context.MODE_PRIVATE)
with(sharedPref) {
return getInt(key, defValue)
}
}