日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Android理解:Activity狀態(tài)和生命周期

系統(tǒng) 3338 0

要想理解Activity的生命周期,必先理解Activity的狀態(tài)。

一、Activity狀態(tài)

Android官方文檔中把Activity分為下面三種狀態(tài):

1、Resumed(活動狀態(tài))

或者叫Running狀態(tài),這個Activity正在屏幕上顯示,并且有用戶焦點。這個很好理解,就是用戶正在操作的那個界面。

2、Paused(暫停狀態(tài))

這是一個比較不常見的狀態(tài)。這個Activity在屏幕上是可見的,但是并不是在屏幕最前端的那個Activity。比如有另一個非全屏或者透明的Activity是Resumed狀態(tài),沒有完全遮蓋這個Activity。

比如下面這個情況,SecondActivity是Resumed狀態(tài),但是并未完全覆蓋MainActivity,此時MainActivity就是Paused狀態(tài)。

Android理解:Activity狀態(tài)和生命周期

3、Stopped(停止?fàn)顟B(tài))

當(dāng)Activity完全不可見時,此時Activity還在后臺運行,仍然在內(nèi)存中保留Activity的狀態(tài),并不是完全銷毀。

這個也很好理解,當(dāng)跳轉(zhuǎn)的另外一個界面,之前的界面還在后臺,按回退按鈕還會恢復(fù)原來的狀態(tài),大部分軟件在打開的時候,直接按Home鍵,并不會關(guān)閉它,此時的Activity就是Stopped狀態(tài)。


二、Activity生命周期

和Activity生命周期相關(guān)的方法有下面幾個:

onCreate(Bundle savedInstanceState)

onStart()

onRestart()

onResume()

onPause()

onStop()

onDestroy()

相對來說方法數(shù)量比較多,初學(xué)者理解起來比較困難。

Android官方文檔中把Activity生命周期分為三個區(qū)間:

1、The entire lifetime(整個生命周期)

是指在onCreate()和onDestroy()之間的周期。

一個人的一生,就是從出生開始,到死亡的這段時間。Activity生命周期也是一樣,從Create開始,直到Destroy,二者在整個生命周期都只有一次。當(dāng)用戶新打開一個界面,此時會調(diào)用onCreate(),當(dāng)用戶關(guān)閉這個界面,例如按返回鍵,此時Activity就完全銷毀,此時會調(diào)用onDestroy()。

這個周期之間包含上面所說的全部狀態(tài):Resumed、Paused、Stopped。

2、The visible lifetime(可見的生命周期)

是指在onStart()和onStop()之間的周期,包含在The entire lifetime

之中。在整個生命周期中可能會有多次。

這段周期包含Resumed、Paused兩種狀態(tài),即兩種Activity可見的狀態(tài)。

當(dāng)Activity會變?yōu)镾topped狀態(tài),例如在新的Activity覆蓋掉原來的Activity時,會調(diào)用onStop()方法,重新回到原來的Activity時,又會調(diào)用onStart()。

3、The foreground lifetime(活動生命周期)

是指在onResume()和onPause()之間的周期,包含在The visible lifetime之中。在The visible lifetime中可能會有多次。

這段周期只包含Resumed一種狀態(tài),即前端獲取焦點用戶可操作的狀態(tài)。

當(dāng)Activity變?yōu)镽esumed狀態(tài),會調(diào)用onResume()方法,反之會調(diào)用onPause()方法。

說到這里,還漏了一個onRestart(),很簡單,Activity第一次onStart()會在onCreate()之后,如果在整個生命周期中再次onStart(),那么調(diào)用onStart()之前會調(diào)用onRestart()。


下面分別來進(jìn)行上面三者的實驗:

MainActivity界面上有兩個按鈕,分別是打開SecondActivity和ThirdActivity:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button 
        android:id="@+id/secondActivityButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="打開SecondActivity"/>
    <Button 
        android:id="@+id/thirdActivityButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="打開ThirdActivity"/>
</LinearLayout>
  
Android理解:Activity狀態(tài)和生命周期

在MainActivity.java中,重寫生命周期相關(guān)方法,加上日志:

    public class MainActivity extends Activity {
	
	private static final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initEvent();
		
		Log.v(TAG, "onCreate");
	}

	@Override
	protected void onStart() {
		super.onStart();
		Log.v(TAG, "onStart");
	}
	
	@Override
	protected void onRestart() {
		super.onRestart();
		Log.v(TAG, "onRestart");
	}

	@Override
	protected void onResume() {
		super.onResume();
		Log.v(TAG, "onResume");
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		Log.v(TAG, "onPause");
	}
	
	@Override
	protected void onStop() {
		super.onStop();
		Log.v(TAG, "onStop");
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.v(TAG, "onDestroy");
	}
	
	private void initEvent() {
		// 點擊打開SecondActivity
		Button secondActivityButton = (Button) findViewById(R.id.secondActivityButton);
		secondActivityButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				Intent intent = new Intent(MainActivity.this, SecondActivity.class);
				startActivity(intent);
			}
		});
		// 點擊打開ThirdActivity
		Button thirdActivityButton = (Button) findViewById(R.id.thirdActivityButton);
		thirdActivityButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
				startActivity(intent);
			}
		});
	}
}
  

Second分別是兩個測試Activity,代碼和xml這里不再貼出來了。

最后AndroidManifest.xml:

        <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.example.app012.MainActivity"
            android:label="MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.app012.SecondActivity"
            android:label="SecondActivity" >
        </activity>
        <activity
            android:name="com.example.app012.ThirdActivity"
            android:label="ThirdActivity" 
            android:theme="@android:style/Theme.Dialog">
        </activity>
    </application>
  

這里SecondActivity是一個普通的Activity,ThirdActivity設(shè)置android:theme="@android:style/Theme.Dialog",表示它顯示為一個對話框,打開ThirdActivity不會完全覆蓋MainActivity狀態(tài),是用來實驗MainActivity的Paused狀態(tài)的。

實驗步驟:

1、

在模擬器中運行程序,此時日志:

onCreate

onStart

onResume

再按返回鍵退出程序:

onPause

onStop

onDestroy

上面模擬了The entire lifetime整個生命周期,剛打開程序時onCreate到Activity銷毀onDestroy。

2、

打開程序后,按“打開SecondActivity”按鈕:

onPause

onStop

再按返回鍵回到MainActivity:
onRestart

onStart

onResume

再按Home鍵回到桌面:

onPause

onStop

再打開程序:

onRestart

onStart

onResume

以上模擬The visible lifetime,當(dāng)MainActivity轉(zhuǎn)到后臺不可見時調(diào)用onStop,再次可見時onStart,由于是再次可見,會調(diào)用onRestart。


3、

打開程序后,按“打開ThirdActivity”按鈕:

onPause

此時MainActivity沒有完全被覆蓋:

Android理解:Activity狀態(tài)和生命周期

再按返回鍵:

onResume

上面模擬The foreground lifetime,失去焦點后onPause,重新得到焦點后onResume。


通過上面實驗,可以看出:

The foreground lifetime(onResume到onPause)包含在Thevisible lifetime(onStart到onStop)之中,The visible lifetime包含在The entire lifetime(onCreate到onDestroy)之中。


作者:叉叉哥 轉(zhuǎn)載請注明出處: http://blog.csdn.net/xiao__gui/article/details/11464603



Android理解:Activity狀態(tài)和生命周期


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 盖州市| 青海省| 灯塔市| 缙云县| 乐都县| 庆阳市| 镇康县| 阿勒泰市| 政和县| 彭水| 洛隆县| 蓝田县| 新乡县| 孟村| 芜湖县| 宜川县| 南昌市| 揭西县| 天水市| 孙吴县| 通山县| 双牌县| 贺兰县| 称多县| 共和县| 泽库县| 华蓥市| 永平县| 潼南县| 平谷区| 三都| 兴山县| 东兰县| 福鼎市| 鸡泽县| 横山县| 黑龙江省| 景东| 永春县| 永仁县| 互助|