【问题标题】:Android onSaveInstance State not working (for me)Android onSaveInstanceState 不工作(对我来说)
【发布时间】:2011-04-03 20:26:06
【问题描述】:

我有一个像 clapperboard 一样的应用程序,在其中我使用一个变量,我每毫秒都会 i++(我需要毫秒来显示每秒帧数,而计时器每秒只更新一次),然后我将它显示在格式 HH:MM:SS:FF。我还有一个退出按钮

if (item.getTitle() == "Quit") {
Process.killProcess(id);
}

问题是我希望应用程序在我按下退出时记住 i 的值,因此如果我再次启动它,计时器将在退出之前的同一点启动。 我试过了

public void onSaveInstanceState(Bundle outState) {
outState.putLong(MILLISECONDS, i);
super.onSaveInstanceState(outState);
}

然后调用它

public void onStart(Bundle savedInstanceState) {
super.onStart();
i = savedInstanceState.getLong(MILLISECONDS);
}

public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
i = savedInstanceState.getLong(MILLISECONDS);
}

但它不起作用。 另外,如果我一起去

onCreate(Bundle savedInstanceState) {

...

i = savedInstanceState.getLong(MILLISECONDS);

...

}

应用程序强制关闭。 请知道我做错了什么吗? 非常感谢。

【问题讨论】:

    标签: android variables


    【解决方案1】:

    您并没有真正以 Android 方式进行操作 :-) 不要杀死您的应用程序,而是回家吧。在这种情况下,将调用 saveinstancestate。

    【讨论】:

    • 所以...是不是因为我要杀了它:|???该死的......我花了 2-3 天试图解决这个问题,我刚刚想到它,当我发布这个可能很重要时。关于不以 Android 方式进行操作......我知道,但我喜欢有一个退出按钮:D。如果我退出应用程序,仍然可以这样做吗?谢谢你启发我,Sebi。
    • 是的,但你退出的方式不对。使用以下代码正确退出:moveTaskToBack(true);
    • 不要使用 moveTaskToBack(true)。做finish()
    【解决方案2】:

    如果您在问题中添加更多详细信息会有所帮助:

    “它不起作用”->它到底是如何不起作用的? savedInstanceState 是空的吗?是否通过异常?
    “应用程序强制关闭”->您能否提供引发的确切异常,或崩溃周围的 logcat 文本?

    话虽如此,saving persistant state 上的这部分文档可能会有所帮助。保存状态有两种不同的时间,onPause 和 onSavedInstanceState。 onPause 是更可靠的一种,因为它被保证作为活动生命周期的一部分被调用。

    如果你保存在 onSaveInstanceState 中,你应该在 onCreate 中重新创建。但是,正如 Sebi 指出的那样,您杀死应用程序的方式可能会阻止 onSaveInstanceState 被调用。

    如果你想结束你的活动,只需调用finish()。

    【讨论】:

    • 所以如果我想在 onCreate 中重新创建它,我只需输入 i = savedInstanceState.getLong(MILLISECONDS); ,对吗?如果没有,我要么将 i 作为持久状态保存在文件中(连同其他可供用户使用的数据),要么删除退出按钮。感谢您的回复。
    • 该链接在您的答案中无效...您能更新一下吗?
    • 是的,如果 onSaveInstance 状态正确执行。您不必删除退出按钮(尽管这不是您通常在 Android 应用中找到的东西),而是通过说 finish() 很好地退出,而不是强制退出。
    猜你喜欢
    • 2021-09-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多