本文實例講述了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所處的狀態。
在上圖中,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中文網!

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),