首頁 Java java教程 Android開發之activity的生命週期詳解

Android開發之activity的生命週期詳解

Jan 07, 2017 pm 04:19 PM

本文實例講述了Android activity的生命週期。分享給大家參考,具體如下:

activity類別處於android.app包中,繼承系統如下:

1.Java.lang.Object

2.android.content.Context

3.android.app .ApplicationContext

4.android.app.Activity

activity是單獨的,用於處理使用者操作。幾乎所有的activity都要和用戶打交道,所以activity類別創建了一個窗口,開發人員可以透過setContentView(View)接口把UI放到activity創建的窗口上,當activity指向全屏窗口時,也可以用其他方式實現:作為漂浮視窗(透過windowIsFloating的主題集合),或嵌入到其他的activity(使用ActivityGroup)。大部分的Activity子類別都需要實作以下兩個介面:

① onCreate(Bundle)介面是初始化activity的地方. 在這兒通常可以呼叫setContentView(int)設定在資源檔案中定義的UI, 使用findViewById(int ) 可以獲得UI中定義的視窗.

② onPause()介面是使用者準備離開activity的地方,在這兒,任何的修改都應該被提交(通常用於ContentProvider保存資料).

為了能夠使用Context .startActivity(),所有的activity類別都必須在AndroidManifest.xml檔案中定義有相關的「activity」項目。

activity類別是Android 應用生命週期的重要部分。

Activity生命週期

在系統中的Activity被一個Activity堆疊所管理。當一個新的Activity啟動時,將被放置到棧頂,成為運行中的Activity,前一個Activity保留在堆疊中,不再放到前台,直到新的Activity退出為止。

Activity有四種本質區別的狀態:

1. 在螢幕的前台(Activity棧頂),叫做活動狀態或運作狀態(active or running)

2. 如果一個Activity失去焦點,但是依然可見(一個新的非全螢幕的Activity 或一個透明的Activity 被放置在堆疊頂部),叫做暫停狀態(Paused)。一個暫停狀態的Activity依然保持活力(保持所有的狀態,成員訊息,和視窗管理器保持連線),但是在系統記憶體極端低下的時候將被殺。

3. 如果一個Activity被另外的Activity完全覆蓋掉,叫做停止狀態(Stopped)。它仍然保持所有狀態和成員訊息,但是它不再可見,所以它的視窗被隱藏,當系統記憶體需要被用在其他地方的時候,Stopped的Activity將被殺。

4. 如果一個Activity是Paused或Stopped狀態,系統可以將該Activity從記憶體中刪除,Android系統採用兩種方式進行刪除,要麼要求該Activity結束,要麼直接殺死它的進程。當該Activity再次顯示給使用者時,它必須重新開始和重置前面的狀態。

下面的圖顯示了Activity的重要狀態轉換,矩形框表明Activity在狀態轉換之間的回調接口,開發人員可以重載實現以便執行相關代碼,帶有顏色的橢圓形表明Activity所處的狀態。

Android開發之activity的生命週期詳解

在上圖中,Activity有三個關鍵的循環:

1. 整個的生命週期,從onCreate(Bundle)開始到onDestroy()結束。 Activity在onCreate()設定所有的「全域」狀態,在onDestory()釋放所有的資源。例如:某個Activity有一個在後台運行的線程,用於從網絡下載數據,則該Activity可以在onCreate()中創建線程,在onDestory()中停止線程。

2. 可見的生命週期,從onStart()開始到onStop()結束。在這段時間,可以看到Activity在螢幕上,儘管有可能不在前台,不能和使用者互動。在這兩個介面之間,需要保持顯示給使用者的UI資料和資源等,例如:可以在onStart中註冊一個IntentReceiver來監聽資料變化導致UI的變動,當不再需要顯示時候,可以在onStop()中註銷它。 onStart(),onStop()都可以被多次調用,因為Activity隨時可以在可見和隱藏之間轉換。

3. 前台的生命週期,從onResume()開始到onPause()結束。在這段時間裡,該Activity處於所有 Activity的最前面,與使用者互動。 Activity可以經常性地在resumed和paused狀態之間切換,例如:當裝置準備休眠時,當一個 Activity處理結果被分發時,當一個新的Intent被分發時。所以在這些介面方法中的程式碼應該屬於非常輕量級的。

Activity的整個生命週期都定義在下面的介面方法中,所有方法都可以被重載。所有的Activity都需要實現onCreate(Bundle)去初始化設置,大部分Activity需要實現onPause()去提交更改過的數據,當前大部分的Activity也需要實現onFreeze()接口,以便恢復在onCreate(Bundle)裡面設定的狀態。

public class Activity extends ApplicationContext {
protected void onCreate(Bundle icicle);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onFreeze(Bundle outIcicle);
protected void onPause();
protected void onStop();
protected void onDestroy();
}
登入後複製

希望本文所述對大家Android程式設計有幫助。

更多Android開發之activity的生命週期詳解相關文章請關注PHP中文網!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1323
25
PHP教程
1272
29
C# 教程
1251
24
公司安全軟件導致應用無法運行?如何排查和解決? 公司安全軟件導致應用無法運行?如何排查和解決? Apr 19, 2025 pm 04:51 PM

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

如何將姓名轉換為數字以實現排序並保持群組中的一致性? 如何將姓名轉換為數字以實現排序並保持群組中的一致性? Apr 19, 2025 pm 11:30 PM

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

如何使用MapStruct簡化系統對接中的字段映射問題? 如何使用MapStruct簡化系統對接中的字段映射問題? Apr 19, 2025 pm 06:21 PM

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? Apr 19, 2025 pm 11:45 PM

在使用IntelliJIDEAUltimate版本啟動Spring...

如何優雅地獲取實體類變量名構建數據庫查詢條件? 如何優雅地獲取實體類變量名構建數據庫查詢條件? Apr 19, 2025 pm 11:42 PM

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對像如何安全地轉換為數組? Java對像如何安全地轉換為數組? Apr 19, 2025 pm 11:33 PM

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

如何利用Redis緩存方案高效實現產品排行榜列表的需求? 如何利用Redis緩存方案高效實現產品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? 電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? Apr 19, 2025 pm 11:27 PM

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

See all articles