Activity异常情况下生命周期分析
2017-03-31 14:49
351 查看
主要分析两种情况:
1 系统资源不足导致优先级低的Activity被回收。
Activity优先级排序:前台可见>前台可见不可交互(前台activity弹出dialog)>后台(用户按下home键、切换到其他应用)
当前台activity被回收,系统处于要奔溃状态,前台可见但不可交互状态下的activity一般情况也不会回收。Activity被系统回收,如果需要保存一些现场数据和再次被用户打开恢复,可借助onSaveInstanceState(Bundle outState)保存数据,onRestoreInstanceState(Bundle savedInstanceState) 恢复数据。虽然可以 onCreate(Bundle savedInstanceState)种对savedInstanceState进行非空判断进行数据恢复,但谷歌更推荐onRestoreInstanceState(Bundle
savedInstanceState) 。
代码如下:
public class MainActivity extends AppCompatActivity {
private EditText testEt;
private String test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testEt= (EditText) findViewById(R.id.test);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
test=testEt.getText().toString();
outState.putString("test",test);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
testEt.setText(savedInstanceState.getString("test","default"));
}
2 由于资源相关配置发生改变导致Activity被杀死和重新创建,比如屏幕发生旋转。使用上述的方法也可以很好的保存和恢复数据。也可以指定configChanges避免由于配置改变导致重建。 android:configChanges="orientation|screenSize",当该activity发生屏幕旋转,activity不会被系统杀死和重建,会回调onConfigurationChanged。当配置程序需要响应配置改变,指定configChanges属性,重写onConfigurationChanged方法即可。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Toast.makeText(MainActivity.this,"屏幕旋转",Toast.LENGTH_SHORT).show();
}
1 系统资源不足导致优先级低的Activity被回收。
Activity优先级排序:前台可见>前台可见不可交互(前台activity弹出dialog)>后台(用户按下home键、切换到其他应用)
当前台activity被回收,系统处于要奔溃状态,前台可见但不可交互状态下的activity一般情况也不会回收。Activity被系统回收,如果需要保存一些现场数据和再次被用户打开恢复,可借助onSaveInstanceState(Bundle outState)保存数据,onRestoreInstanceState(Bundle savedInstanceState) 恢复数据。虽然可以 onCreate(Bundle savedInstanceState)种对savedInstanceState进行非空判断进行数据恢复,但谷歌更推荐onRestoreInstanceState(Bundle
savedInstanceState) 。
代码如下:
public class MainActivity extends AppCompatActivity {
private EditText testEt;
private String test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testEt= (EditText) findViewById(R.id.test);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
test=testEt.getText().toString();
outState.putString("test",test);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
testEt.setText(savedInstanceState.getString("test","default"));
}
2 由于资源相关配置发生改变导致Activity被杀死和重新创建,比如屏幕发生旋转。使用上述的方法也可以很好的保存和恢复数据。也可以指定configChanges避免由于配置改变导致重建。 android:configChanges="orientation|screenSize",当该activity发生屏幕旋转,activity不会被系统杀死和重建,会回调onConfigurationChanged。当配置程序需要响应配置改变,指定configChanges属性,重写onConfigurationChanged方法即可。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Toast.makeText(MainActivity.this,"屏幕旋转",Toast.LENGTH_SHORT).show();
}
相关文章推荐
- Activity异常情况下的生命周期分析
- Activity的生命周期及异常情况分析
- Activity基础篇之异常情况下生命周期分析
- android开发艺术探索 2 Activity异常情况下的生命周期分析
- activity异常情况生命周期的分析
- 【安卓笔记】成长第一步,Activity在正常情况下与异常情况下的生命周期
- 2.Activity异常情况下的生命周期分析学习笔记
- 异常情况下的生命周期分析
- Android Activity的生命周期和启动模式(一)——典型情况下的生命周期分析
- Activity异常情况下的生命周期
- Activity异常情况下的生命周期
- Android异常情况下的生命周期分析
- Android Activity的生命周期与异常生命周期的分析
- Activity异常情况下声明周期分析
- Activity的正常和异常生命周期分析
- Android中切换屏幕方向时Activity生命周期函数执行情况分析
- Android横向界面锁屏时生命周期异常情况处理--Activity异常销毁重建
- Android异常情况下的生命周期分析
- 异常情况下的生命周期分析
- 异常情况下的生命周期分析