官方解讀Activity之一 – Android移動開發技術文章_手機開發 Android移動開發教學課程

一個Activity是一個單獨的,用戶聚焦的一個組件,幾乎所有的activities都可以和用戶進行交互,因此Activity類關註創建窗口,你可以通過setContentView(View)這個函數在建立的窗口上放置自己的UI。雖然activities經常是以全屏的形式呈現給用戶,但是它也可以以其他的方式來使用:以一個浮動窗口顯示(通過設置WindowsIsFloating這個主題)或者是嵌入其他的activity(通過使用ActivityGroup)幾乎所有的Activity的子類都會實現兩個方法:
     onCreate(Bundle):這個方法通常是用來初始化你的activity的,最重要的是,你經常會在這個方法裡面調用setContentView(int)方法,通過一個佈局資源來定義你自己的UI,並且用findViewById(int)這個方法去獲取UI中的組件,方便通過編程進行操作。
     onPause():這個方法是用來定義當用戶離開這個activity時采取的動作。最重要的,用戶在這裡做出的任何改變都需要被提交(通常是提交到保存程序數據的ContentProvider)。
       通常有兩種方式啟動一個activity,一種方法是我們比較熟悉的當點擊應用程序的圖標的時候,這是會啟動程序定義的啟動activity,具體的看一下工程的AndroidManifest.xml文件就知道瞭;另一種方式是通過在一個activity中啟動另外一個activity,相信大傢對這個也不陌生,因為幾乎絕大多數的應用都是有多個activity組成,我們從應用程序的一個界面進入到另一個界面就屬於這種方式瞭。我們在一個activity中調用Content.startActivity()就可以啟動一個指定的activity瞭,但是要註意的是,當使用Content.startActivity()這個方法啟動另外的activity時,所有的activity都必須要在AndroidManifest.xml文件中聲明相應的<activity>標簽。否則應用程序是找不到你所要啟動的activity的。
我們將要討論的主題有:
1、Fragments
2、Activity的生命周期
3、配置改變
4、啟動Activities並獲取結果
5、保存持久的狀態
6、權限
7、進程的生命周期


開發者指南:
Activity是應用程序整個生命周期的重要部分,activities的啟動和組織是平臺應用程序模型的基礎部分。對應用程序結構和activities如何執行,可以參考 Application Fundamentals 和 Tasks and Back Stack開發者指南!可以在 Activities開發者指南中找到更為詳細的關於如何創建activities的討論!


Fragments:

    從蜂巢版本開始,Activity 可以利用 Fragment類更好的模塊化自己的代碼,為更大的屏幕創建更加復雜的用戶界面,並且幫助他們的應用程序適應大小屏幕。


Activity的生命周期
    系統中的activities是作為activity stack來管理的。當一個新的activity被啟動,它就放置在棧頂並且成為當前運行的activity–之前的activity保存在棧中,並且在新啟動的activity退出之前,不會出現在屏幕的前端!
每個activity有四個狀態:
1、當一個activity在屏幕的最頂層(也就是棧頂),此時activity被激活,即是運行狀態。
2、當一個activity失去瞭焦點,但是仍然可見(有一個非全屏幕或者透明的acticity在該activity上面),此時就是暫停狀態。處於暫停狀態的activity仍然處於激活狀態,但是再系統內存過低的情況下,暫停的activity可以被系統殺死。
3、如果一個activity被另外一個activity完全遮蔽,此時就處於停止狀態。此時它仍然保持所有的狀態和信息,但是不可見瞭,並且在系統需要內存的時候可以殺死這個activity。
4、如果一個activity處於暫停或者停止狀態,系統可以通過關閉這個activity或者僅僅是殺死這個進程。當這個activity再次呈現在用戶面前時,他必須是被完全的重啟並且恢復到原來的狀態!

下面的圖展示瞭一個activity的重要的狀態轉換。在四方的矩形中出現的是我們可以調用的方法,使activity在兩個狀態之間轉換。著色的橢圓中顯示的是activity可以處於的幾種狀態。

 這裡有三個重要的循環,你可能會再監視你自己的activity時加以關註的。
1、一個activity的entire lifetime(全局生命周期)出現在第一次調用onCreate(Bundle)直到最後調用onDestroy()。一個activity將在onCreate()中設置全局的狀態,並且再onDestroy()中釋放所有的資源。例如:有一個線程再後臺運行,從網絡中下載數據,那麼它很有可能就是再onCreate()方法中創建這個線程俄,而在onDestroy()中停止這個線程。
2、一個activity的visible lifetime(可見生命周期)發生在調用onStart()一直到相應的onStop()的調用。在這期間,用戶可以再屏幕上看到這個activity,盡管它可能並不是處於屏幕的最前端或者該activity不能和用戶交互。例如:我們可以在onStart()方法中註冊一個 BroadcastReceiver來監聽UI的變化,並且在onStop()中註銷它,onStart()和onStop()可以多次調用,activity相應的就會顯示或者消失。
3、一個activity的foreground lifetime(前臺周期)發生在調用onResume()到相應的調用onPause()之間。在這期間,該activity始終處於屏幕的最前端,並且和用戶進行交互,一個activity可以頻繁的在resumed和paused兩種狀態之前切換,例如:當設備進入休眠狀態,當一個activity的結果被發送,當一個新的intent被發送,因此再這個方法中的代碼必須相當的簡潔!
    一個activity的全局生命周期是通過如下的方法來定義的。所有的這些方法都是可以用自己的代碼來覆蓋的,從而在狀態間切換時可以完成適當的工作,所有的activity都必須實現onCreate(BUndle)來實現初始化;很多都會實現onPause()提交變化到數據中,除此之外還會準備停止和用戶的交互。當你實現這些方法的時候,你必須想到超類!
    public class Activity extends ApplicationContext { 
    protected void onCreate(Bundle savedInstanceState); 
 
 
    protected void onStart(); 
     
    protected void onRestart(); 
 
 
    protected void onResume(); 
 
 
    protected void onPause(); 
 
 
    protected void onStop(); 
 
 
    protected void onDestroy(); 

    public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);


     protected void onStart();
    
     protected void onRestart();


     protected void onResume();


     protected void onPause();


     protected void onStop();


     protected void onDestroy();
 }

 一個activity並不是總可以被系統殺死的,隻有再部分狀態下才可以被系統殺死,例如:在activity處於onPause()和onResume()之中時,系統是可以由於一些原因(內存不足等等)將其殺死!
 好瞭,今天就先寫這麼多,明天繼續!
 

摘自 chenlong12580的專欄
 

發佈留言