我试图在两个活动之间切换。 在活动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被调用时,我不会丢失任何文本。
答案 0 :(得分:0)
据我所知,只有当您的活动被销毁并再次创建时,才会调用onRestoreInstance。因此,在这种情况下,您将恢复以前的已销毁活动状态。
但是在你的情况下,活动没有被破坏,它只是被系统停止了,所以它没有松动它的状态,所以不需要恢复它。
<强>被修改强>
由于您提供了活动的代码,如我所见,您从第二个活动开放而不是第一个活动,而是第三个活动,其类型为第一个活动。 所以在第二个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的意图