android - 按下返回键时如何防止数据丢失
问题描述
MainActivity代码是
class MainActivity : AppCompatActivity() {
var number=0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(savedInstanceState!=null){
number=savedInstanceState.getInt("Number",number)
}
findViewById<Button>(R.id.button).setOnClickListener{
number +=5
findViewById<TextView>(R.id.textView).text="$number"
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("Number",number)
Log.i("MainActivity","Saved Instance Called")
}
}
请参阅当我运行应用程序并按下返回按钮时,数字的数据未恢复,但是当我按下主页按钮时数据已恢复。
解决方案
如果您按下主页按钮,您的应用程序将被置于后台并Activity
保持活动状态(但暂停)。在任何时间点,系统都可以销毁它以释放内存,并且只保留由onSaveInstanceState
. onCreate
当savedInstanceState
你回到你的应用程序时,这个包然后被传递给。
但是,当您按下后退按钮时,您的活动已完成并且应用程序已关闭。在这种情况下不会生成保存状态,因此如果您想保留您的number
值,您必须将其存储在持久存储中,如首选项、数据库、文件等(取决于用例)。
推荐阅读
- javascript - D3.js 使用无序列表旋转饼图
- c - 如何使用 MPI 解决 C 中的“malloc():内存损坏”
- python - Python 迭代器类总是返回字典对象的初始状态。为什么?
- java - JavaFX - 切换阶段和新阶段的 setX 和 setY
- javascript - 如何使用大写和数字的正则表达式验证匹配密码并确认密码
- android - 如何使用 Provider 在两个小部件之间共享数据?
- tensorflow.js - 安装 tensorflow/tfjs-node 时出现 sysmlink 错误
- postgresql - 递归 CTE 血统(拥有多个经理的员工)
- docker - docker eclipse-mosquitto:2.0.7 错误:地址不可用
- c# - 从 ASP.NET Core 页面将 HTML 表单提交到 PHP 文件