笔记一:安卓生命周期

来源:互联网 发布:中文域名 英文域名 编辑:程序博客网 时间:2024/05/20 13:39

一、生命周期图

1、当一个activity启动时,会执行onCreate→onStart→onResume

2、当按下返回键时,会执行onPause→onStop→onDestory

3、当按下Home键,有电话呼入挡住当前的activity会执行onPause→onStop,然后界面可见时执行onRestart→onStart→onResume

4、当打开一个透明的activity,将执行onPause→onResume

5、当程序在后台运行,或者不可与用户进行交互,这时当系统内存不足时,优先级比较高的应用需要内存,就会杀死改活动,重新打开会执行onCreate→onStart→onResume


二、activity异常被销毁执行过程

1、activity在异常情况下被销毁会执行onSaveInstanceState用来保存数据,这个方法调用在onStop之前,可能在onPause之前也可能之后,当activity重新创建后,系统会调用OnRestoreInstanceState,将onSaveInstanceState保存的bundle对象作为参数传给onCreate和OnRestoreInstanceState,onCreate和OnRestoreInstanceState进行判断activity是否被创建,并取出数据,OnRestoreInstanceState方法调用在onStart之前

2、下面看一个例子

布局只有一个EditText,查看当屏幕旋转activity方法执行的情况

public class MainActivity extends Activity {


private TextView content;
private String text;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
content = (TextView) findViewById(R.id.edContent);

if (savedInstanceState!=null) {
String s = savedInstanceState.getString("save");
content.setText(s);
System.out.println("s:"+s);
}
System.out.println("onCreate");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
System.out.println("onRestoreInstaceState");
String s = savedInstanceState.getString("save", "hi");
content.setText(s);
}

@Override
protected void onStart() {
super.onStart();
System.out.println("onStart");
}

@Override
protected void onResume() {
super.onResume();
System.out.println("onResume");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("onStop");
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
text = content.getText().toString();
outState.putString("save", text);
System.out.println("onSaveInstanceState");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestory");
}
}

ctrl+f11结果如下:

当按home键


按返回键


从以上可以得出结论:只有在异常销毁时才会调用onRestoreInstanceState,例如屏幕旋转,被强迫杀死。

三、activity的优先级


3、当系统配置发生变化时activity就会被重新创建,要避免这种情况需要在清单文件中配置configChanges

例如: android:configChanges="keyboardHidden|orientation|locale|screenSize"

当屏幕再次旋转时就不会重新创建activity会调用onConfigurationChanged方法

这时ctrl+f11结果如下:

   


0 0
原创粉丝点击