Android基础(七) Activity的生命周期
1.Activity的三种状态
运行状态:Activity在最前端运行
停止状态:Activity不可见,完全被覆盖
暂停状态:Activity可见,但前端还有其他Activity
2.Activity生命周期的相关方法
onCreate():在Activity创建时调用,或者程序在暂停、停止状态下被杀死之后,重新打开时也会调用。
onStart():onCreate()方法被调用以后,或者Activity从停止状态恢复到运行状态时调用。
onResume():onStart()方法被调用以后,或者Activity从暂停状态恢复到运行状态时会调用。
onPause():Activity进入暂停、停止状态,或者Activity销毁时都会调用。
onStop():Activity进入停止状态,或者Activity销毁时会调用。
onDestroy():Activity销毁时调用。
onRestart():Activity从停止状态恢复到运行状态时会调用,并且会依次调用onStart()、onResume()方法。
3.横竖屏切换时Activity的行为
默认情况下,Activity会随着传感器方向的改变而改变,而可见的Activity在横竖屏切换的时候会被销毁重绘。
onSaveInstanceState(Bundle outState):在Activity被动的摧毁或者停止的时候调用,用于保存程序运行时的数据,可以将数据保存在Bundle中。
onRestoreInstanceState(Bundle savedInstanceState):该方法在Activity被重绘时调用,savedInstanceState就是onSaveInstanceState(Bundle outState)方法保存下来的数据。
如果不希望Activity被摧毁重绘,可以在对应的<activity>标签中设置如下属性:
android:configChanges="orientation"
这样在改变方向时就会执行onConfigurationChanged()方法,而不会摧毁重绘。
如果需要指定Activity的方向,可以在<activity>标签中设置如下属性:
android:screenOrientation=””
public class MainActivity extends Activity {
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
System.out.println("横竖屏切换: " + newConfig.orientation);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
System.out.println("onSaveInstanceState");
outState.putString("data", "销毁前存储的数据!!!");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
System.out.println("onRestoreInstanceState");
System.out.println(savedInstanceState.getString("data"));
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("onCreate");
System.out.println(savedInstanceState == null ? "null" : savedInstanceState.getString("data"));
}
protected void onStart() {
super.onStart();
System.out.println("onStart");
}
protected void onRestart() {
super.onRestart();
System.out.println("onRestart");
}
protected void onResume() {
super.onResume();
System.out.println("onResume");
}
protected void onPause() {
super.onPause();
System.out.println("onPause");
}
protected void onStop() {
super.onStop();
System.out.println("onStop");
}
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestroy");
}
public void full(View view) {
startActivity(new Intent(this, FullScreenActivity.class));
}
public void dialog(View view) {
startActivity(new Intent(this, DialogActivity.class));
}
}
public class FullScreenActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.full);
}
}
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.life"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:screenOrientation="fullSensor"
android:configChanges="orientation"
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".FullScreenActivity" />
<activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog" />
</application>
</manifest>

浙公网安备 33010602011771号