Activity和Task

Task的概念

        A task is a stack of activities. Task 就是一個棧,這個棧裏面存放了很多 Activity ,它遵循着後進先出的原則。在一個應用程序中用戶先後打開的Activity先後進入Task

    看一個例子:創建一個Android應用程序,這個應用程序中有三個ActivityActivity01Activity02Activity03。每一個Activity中都有一個TextView控件和Button控件。點擊Activity01中的Button按鈕會跳轉到Activity02,點擊Activity02中的Button按鈕會跳轉到Activity03

   

   

   

    運行應用程序,最先顯示Activity01Activity01被壓入Task棧中,點擊Button之後顯示Activity02Activity02被壓入棧中,再點擊Activity02Button按鈕顯示Activity03Activity03被壓入棧中。與用戶交互的Activity永遠是位於棧頂的那個Activity

        

    當我們點擊Back鍵時,Task棧中的Activity03出棧顯示,Activity02,再點擊BackActivity02退出棧,RestartActivity01,再點擊Back鍵,Activity01對象出棧,Task棧爲空,應用程序退出。

        

    如果在 Activity02 中的 startActivity(intent) 後調用 finish() 方法。將程序運行到 Activity03 後,點擊 Back 按鈕,此時,程序並沒有返回到 Activity02 ,而是直接返回到 Activity01 原因:由於在點擊 Activity02 的按鈕之後,它啓動了 Activity03 ,同時將 Activity02 銷燬掉了,這個時候棧裏面只有 Activity03 Activity01 ,當再點擊 Back 的時候它就不是回到 Activity02 而是回到 Activity01 了。

以對話框顯示Activity

         Activity可以以對話框的形式顯示,這個時候前一個Activity沒有被完全遮擋,因此對用戶來說仍然是可見的,但是沒有獲得焦點,所以用戶不能與前一個Activity進行交互。以對話框的形式顯示Activity很簡單,在Maifest.xml文件中註冊Activity時把Activity的屬性加上  android:theme="@android:style/Theme.Dialog就可以了。

如:

          <activity android:name=".Activity03" android:label="Activity03" android:theme="@android:style/Theme.Dialog" />

這樣Activity03就以對話框的形式顯示了。需要注意的是Activity03不以對話框的形式顯示時,從Activity02跳轉到Activity03時依次調用Activity02.OnPause()->Activity03.OnCreate()->Activity03.start()->Activity03.resume()->Activity02.stop()等方法,而以對話框形式顯示時依次調用Activity02.OnPause()->Activity03.OnCreate()->Activity03.start()->Activity03.resume(),不再調用Activity02.stop()方法,因爲Activity02沒有被完全遮擋,對用戶來說是可見的。

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章