您的位置:首页 > 移动开发 > Android开发

Android基础(七) Activity的生命周期

2013-04-21 20:05 645 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: