提问者:小点点

Android Studio-保存应用程序的状态


我有一个应用程序,里面有我正在做的一些课程的进度条。 我可以修改进度,但我希望每次关闭应用程序时都保存该应用程序的状态,而不是每次都从0重新启动。 我怎么能这么做呢?


共2个答案

匿名用户

根据评论中给出的官方文档,为了在应用程序中保留状态,您有三个选项:

  • 通过ViewModel
  • 已保存实例状态
  • 在持久存储中

因为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)
        }
    }