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>