问题总结:
1、Activity完整的生命周期
2、当打开第二个Activity并关闭时候的生命周期。
①、解释为什么onPause()方法不要有耗时操作
3、Activity发生异常重启的时候
问题:1、异常的原因
4、Activity异常的生命周期
1、如何保存数据和获取数据 2、发现一些控件会自动保存数据 原理是什么
5、Activity异常的解决办法
①、防止屏幕旋转,并重启Activity
②、当键盘改变的时候,改变布局。
回答:
1、当发生异常重启的时候,如何保存数据和获取数据
步骤:1、重写onSaveInstance()方法 2、重写onRestoreInstance()或者在onCreate()方法获取存储的数据。
详细步骤:
1、创建MainActivity
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
2、重写onSaveInstance();
public class MainActivity extends AppCompatActivity { //保存的数据 private String data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); data = "重启保存"; } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //将保存的数据存入Bundle中 outState.putString("data",data); } }
3、通过onCreate()获取数据
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); data = "重启保存"; //当被重启的时候,savedInstanceState不为null且为onSaveInstanceState()中我们存储的数据 if (savedInstanceState != null){ data = savedInstanceState.getString("data"); } }
4、通过onRestoreInstance()获取数据
@Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); data = savedInstanceState.getString("data"); }
完整代码:
public class MainActivity extends AppCompatActivity { //保存的数据 private String data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); data = "重启保存"; //当被重启的时候,savedInstanceState不为null且为onSaveInstanceState()中我们存储的数据 if (savedInstanceState != null){ data = savedInstanceState.getString("data"); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); data = savedInstanceState.getString("data"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //将保存的数据存入Bundle中 outState.putString("data",data); } }