2012-03-30 92 views
0

我有一个简单的代码,我想知道什么时候onRestoreInstanceState在程序执行过程中调用在android中?onRestoreInstanceState不会被调用?

请帮我一把。

在此先感谢。

我的第一个活动是如下

public class AbcActivity extends Activity { 
Button b1; 
EditText ed1; 
Bundle b = new Bundle(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.v("Tag", "inside oncreate"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    b1 = (Button) findViewById(R.id.button1); 
    ed1 = (EditText) findViewById(R.id.editText1); 

    b1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), 
        SecondActivity.class); 
      startActivity(intent); 
     } 
    }); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    Log.v("Tag", "inside onsave instance state"); 

    outState.putString("key", ed1.getText().toString()); 
    super.onSaveInstanceState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    Log.v("Tag", "inside on restore instance state"); 
    super.onRestoreInstanceState(savedInstanceState); 

    if (savedInstanceState != null) { 
     Log.v("tag", "inside if"); 
     String str = savedInstanceState.getString("key"); 
     ed1.setText("" + str); 
    } 

} 

}

我的第二个活动代码如下

public class SecondActivity extends Activity { 
Button back; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Log.v("Tag", "inside 2 oncreate"); 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second); 

    back = (Button) findViewById(R.id.button1); 

    back.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), 
        AbcActivity.class); 
      startActivity(intent); 
     } 
    }); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    Log.v("Tag", "inside 2 onsave instance state"); 
    super.onSaveInstanceState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    Log.v("Tag", "inside 2 on restore instance state"); 
    super.onRestoreInstanceState(savedInstanceState); 
} 

}

回答

2

由于文档状态:

当活动正在从先前保存的状态 重新初始化此方法onStart()后叫... 这种方法被称为onStart()onPostCreate(Bundle)

之间就是这种情况,当你Activity是重 - 在被系统杀死后或在配置更改后创建,并将其状态保存在onSaveInstanceState(Bundle)中 - 在处理Activity之前总是调用该状态。

+0

所以我需要在我的代码中调用finish()或onStop()方法吗? – Shri 2012-03-30 07:54:17

+0

不,它只是在您的活动中断后才会调用,例如由于内存条件不足导致销毁后。您可以通过打开您想要测试的活动来“模拟”,按主页按钮,然后杀死该过程,例如通过DDMS(这将发送System.exit(1)) – Matthias 2012-03-30 07:57:22

+1

做什么Matthias说或只是改变方向。 @Matthias不是唯一的情况,它也是在配置更改后调用的。 – futtetennista 2012-03-30 08:32:42