什么更适合我的需求,onPause()或onSaveInstanceState()?

时间:2011-06-28 02:59:51

标签: java android bundle onpause

我有一个有三个页面的应用程序,其中一个是主页面。如果用户转到两个子页面之一,用户可以输入我想要保存的几个字段。我一直在研究onPause()和onSaveInstanceState()。我想我只想要对这两个问题做一个明确的解释,如果onPause()更好,那么代码的例子。这就是我对onSaveInstanceState()的看法。

protected void onSaveInstanceState(Bundle outState) {
    // Save away the original text, so we still have it if the activity
    // needs to be killed while paused.

    outState.putDouble("quizPts",qpts);
    outState.putDouble("quizV",qvalue);
    outState.putDouble("tPts",tpts);
    outState.putDouble("tValue", tvalue);
    outState.putDouble("hPts", hpts);

这就是我设置bundle的方式,给它一个ID和一个值。

public void onRestoreInstanceState(Bundle outState) {
  super.onRestoreInstanceState(outState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  qpts = outState.getDouble("quizPts");
  qvalue = outState.getDouble("quizV");
  tpts = outState.getDouble("tPts");
  tvalue = outState.getDouble("tValue");
  hpts = outState.getDouble("hPts");

这是我计划如何撤销它,问题是我不明白如何通过Bundle来恢复它。我正在设置我需要回到设置到UI的变量的变量。

任何建议都会很棒

感谢初学者androider

2 个答案:

答案 0 :(得分:1)

最佳选择是共享偏好。暂停是为了在应用暂停时因电话或其他事情而引起您的疑虑。但是,如果您使用共享首选项,它会为您提供保存数据的方法,如果保存的值不可用,则使用默认值恢复它。此数据将在用户会话中持续存在(即使您的应用程序被终止)。但是,如果您计划保存除原始数据类型之外的其他内容(如bool,int等),那么这不是一个好的选择。

请参阅http://developer.android.com/guide/topics/data/data-storage.html#pref

答案 1 :(得分:0)

您不需要自己传递包:Activity框架负责处理。使用onSaveInstanceState():如果系统因任何原因销毁了Activity类,它将被调用,所以你应该把你的逻辑放在那里。如果您离开您的活动,将始终调用onPause,无论活动是否被销毁。

我还会在onRestoreInstanceState中添加一张支票:

public void onRestoreInstanceState(Bundle outState) {
  super.onRestoreInstanceState(outState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  if(outState.containsKey("quizPts")) qpts = outState.getDouble("quizPts");
  if(outState.containsKey("quizV")) qvalue = outState.getDouble("quizV");
  if(outState.containsKey("tPts")) tpts = outState.getDouble("tPts");
  if(outState.containsKey("tValue")) tvalue = outState.getDouble("tValue");
  if(outState.containsKey("hPts")) hpts = outState.getDouble("hPts");