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()方法。

clip_image002

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>
原文地址:https://www.cnblogs.com/chenchong/p/3034336.html