星期六, 10月 29, 2011

Activity (四)

Android應用程式學習筆記

Shutting Down an Activity

呼叫finish()方法就可以關閉activity,你也可以從另外一個activity呼叫finishActivity()方法關閉activity。


Managing the Activity Lifecycle

藉由回調方法管理activity的生命週期對於開發強健且靈活的應用程式來說是相當重要的,activity的生命週期直接受到與它相關的其他activity,它的task及back stack所影響。

activity有三個基本的狀態:
Resumed
Activity運行在前台且擁有用戶焦點。
Paused
其他Activity運行在前台且擁有用戶焦點,但是activity仍是可見的,那就是其他activities顯示在它的上面,其他activtiy部分是透明的或是不會完全覆蓋整個屏幕。被暫停的activity仍是活的,但是系統可能在極低記憶體的狀態下殺掉被暫停的activity。 
Stopped
Activity完全被其他activtiy遮掩(activity現在運行於後台),被停止的activity也仍是活的,然而被停止的activity不會被用戶看見且它可能被系統殺掉,當系統需要記憶體空間時。
如果activity處在暫停或是停止狀態,系統可以從記憶體停止這些activity,不論是要求它們結束或是殺掉它們的程序,當'它們再次被啟動,再全部重建。


Implementing the lifecycle callbacks

當activity轉換狀態,會接收許多回調方法通知。所有回調方法都可以複寫來完成在狀態改變時適合的工作,以下就是生命週期中所有回調方法:



public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
    }
    @Override
    protected void onStart() {
        super.onStart();
        // The activity is about to become visible.
    }
    @Override
    protected void onResume() {
        super.onResume();
        // The activity has become visible (it is now "resumed").
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Another activity is taking focus (this activity is about to be "paused").
    }
    @Override
    protected void onStop() {
        super.onStop();
        // The activity is no longer visible (it is now "stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // The activity is about to be destroyed.
    }
}


這些方法定義了activtiy的整個生命週期,藉由實現這些方法,你可以注意到在生命週期中有三個巢狀迴圈:

  • Entire lifetime-Activity的entire lifetime發生在呼叫onCreate()方法與呼叫onDestory()方法之間,你的activity應該在onCreate()方法中設置"總體"狀態(比如定義布局),在onDestory()方法中釋放所有剩下的資源。例如,如果你的activity有一個執行緒在後台執行從網路下載資料的工作,activtiy在onCreate()方法中建立執行緒,而在onDestory()方法中停止執行緒。
  • Visible lifetime-Activity的visible lifetime發生在呼叫onStart()方法與onStop()方法之間,在此時段中,用戶可以在屏幕上看見activity並與它互動。例如,當新的activity啟動而activity不再可見時,onStop()方法被呼叫。在onStart()與onStop()之間,你可以保有顯示activity給用戶的資源。例如,你可以在onStart()方法註冊BroadcastReciever監視影響UI的改變,在onStop()方法撤銷BroadcastReciever。系統可能在activity的生命週期中多次呼叫onStart()方法和onStop()方法,當activity對於用戶為可見與隱藏之間交替時。
  • Foreground lifetime-Activity的foreground lifetime發生在呼叫onResume()方法與呼叫onPause()方法之間,在此時段中,activity在屏幕上是在所有其他activity前面且擁有用戶焦點。activity會頻繁地轉進與轉出前台,例如,當裝置進入睡眠狀態時呼叫onPause()方法,或是當一個對話框出現。因為經常在此狀態轉換,這兩個方法在程式碼中應該要公平,避免變慢造成用戶在此狀態轉換時需要等待。
下圖顯示這些loops及兩狀態之間的路徑。

在這裡做個小小總結:

1.關閉activity有兩個方法,呼叫finish()及finishActivity()。
2.Activtiy生命週期中有三個迴圈,Entire lifetime、Visible lifetime、Foreground lifetime。
3.Entire lifetime為onCreate()與onDestory()之間,為activity的整個生命週期,主要執行取得資源與釋放資源的工作。
4.Visible lifetime為onStart()與onStop()之間,為activity可以被看見的時間,主要執行與使用者介面相關的工作。
5.Foreground lifetime為onResume()與onPause()之間,為activity被用戶使用的時間。
6.當執行到onCreate()時,用戶還未看見activity,當執行到onStart()時,用戶才看見activtiy。

沒有留言:

張貼留言