在活动之间切换时不会调用onRestoreInstance

时间:2016-07-16 12:02:44

标签: android android-activity

我试图在两个活动之间切换。 在活动1中,我使用名为 GoToSecond 的Button来转到第二个活动。 同样,在活动2中,让名为 GoToFirst 的Button转到第一个活动。

我在第一项活动中使用了日志消息。

单击GoToSecond按钮时获取的顺序是 的onCreate

在onStart

onResume

onSaveInstance

的onStop

然后切换到第二个活动。 现在在第二个活动中,当我单击按钮GoToFirst时,第一个活动打开并且 第一个活动中的日志顺序是

的onCreate

在onStart

onResume ..

为什么 onRestoreInstance 在onStart之后没有被调用? 即使实例存储了??

可以帮助我吗?

以下是第一项活动的代码:

public class MainActivity extends AppCompatActivity {
EditText hello;
Button b1;
public static String TAG="Prajwal";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    hello=(EditText) findViewById(R.id.hello);
    Log.d(TAG,"OnCreate counter 1");
    b1=(Button) findViewById(R.id.b1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    Intent i=new Intent(MainActivity.this,Main2Activity.class);
    startActivity(i);
}
});

我没有在代码中添加日志消息。

第二个活动代码是

public class Main2Activity extends AppCompatActivity {
Button b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    b2=(Button) findViewById(R.id.b2);
    b2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Intent i=new Intent(Main2Activity.this,MainActivity.class);
              startActivity(i);
        }
    });
    Log.d(MainActivity.TAG,"Oncreate 2");

}

例如 如果我在第一个活动中有一个EditText,如果我有一些文本,我会在第二个活动切换到第一个活动时丢失该文本。 bcoz onCreate在第一个活动中被调用。 但当我切换到横向模式onRestoreInstance被调用时,我不会丢失任何文本。

1 个答案:

答案 0 :(得分:0)

据我所知,只有当您的活动被销毁并再次创建时,才会调用onRestoreInstance。因此,在这种情况下,您将恢复以前的已销毁活动状态。

但是在你的情况下,活动没有被破坏,它只是被系统停止了,所以它没有松动它的状态,所以不需要恢复它。

请参阅以下链接了解详情:FIRSTSECOND

<强>被修改

由于您提供了活动的代码,如我所见,您从第二个活动开放而不是第一个活动,而是第三个活动,其类型为第一个活动。 所以在第二个Activity中按下按钮后你的堆栈跟踪将是:

MainActivity - &gt; Main2Activity - &gt; MainActivity。

所以你有两个简单的解决方案: 1)而不是

Intent i=new Intent(Main2Activity.this,MainActivity.class);
startActivity(i);

只需撰写finish();

即可

2)将标志FLAG_ACTIVITY_CLEAR_TOP添加到从Main2Activity到MainActivity的意图