2009-09-28 17 views
0

我的Android應用程序包含一套迷你應用程序。簡而言之,主屏幕包含多個圖標,每個圖標用於迷你應用程序。點擊圖標後,便會啓動小應用程序。 總共有4個迷你應用程序。所以你可以想象我的主屏幕就像主屏幕啓動器一樣。雖然這些小應用程序可以獨立運行,但我希望用戶通過身份驗證。因此在MainActivity之前有一個LoginActivity權限。想知道taskAffinity&launchModes的正確使用嗎?

LoginActivity -> MainActivity ---> AppOneActivity 
           ---> AppTwoActivity 
           ---> AppThreeActivity 
           ---> AppFourActivity (aka PresenceListActivity) 

我仍然不很確定的任務的好處(排列組活動的),所以我想在我的設計決定從Android的專家意見: -

(1)我計劃將屬性finishOnTaskLaunch設置爲true對於LoginActivity。據我瞭解,一旦登錄通過身份驗證,我將導航到MainActivity,我想LoginActivity消失。這是否比在活動上致電#finish好? MainActivity會自動成爲任務的根,不需要任何額外的配置/代碼?

(2)其中一個迷你應用程序是一個IM客戶端。 PresenceListActivity將承載許多ChatActivity實例(與buddylist中的活動聯繫人進行一對一聊天會話)。我打算使用ChatActivity的默認啓動模式,因爲每個聊天應該由新實例處理。聽起來正確嗎?

(3)粘導航欄將在AppOneActivityAppTwoActivity等右上角存在。我打算設置clearTaskOnLaunch屬性爲true,所有的人。據我瞭解,每當我計劃推出任何迷你應用程序時,我都應該清除堆棧。他們的launchModes將是singleTask。我在正確的道路上嗎?

(4)最後我真的不知道如何讀取adb shell dumpsys活動的輸出。例如

Task{10 com.me.rnd.exit} 
clearOnBackground=false numActivities=1 
affinity=com.me.rnd.exit 
lastActiveTime=5513102 (inactive for 5s) 
    History #1: ..... 

Task{2 com.android.launcher} 
clearOnBackground=true numActivities=1 rootWasReset=true 
affinity=com.android.launcher 
lastActiveTime=5512949 (inactive for 6s) 
    Running #0: 

有時任務的下面,你將看到歷史,而在其他運行,這分別意味着什麼?更奇怪的是,有時候我有兩個歷史下的任務。

回答

0

(1)我打算爲LoginActivity設置屬性finishOnTaskLaunch爲true。據我瞭解,一旦登錄通過身份驗證,我將導航到MainActivity,我想LoginActivity消失。這比在活動上調用#finish更好嗎? MainActivity會自動成爲任務的根,不需要任何額外的配置/代碼?

我建議從一開始就讓MainActivity成爲根活動。

首先,MainActivity會創建LoginActivity或LoginDialog並將結果返回給MainActivity。

這樣你就不必弄清楚如何將MainActivity從子級移動到根級活動。

但是,如果這會干擾您的代碼太多,那麼請不要考慮我的建議。

乾杯,

約瑟夫

+0

在MainActivity需要獲取並加載大量的數據,所以我不認爲你的建議將工作。 – 2009-09-29 04:18:00

+0

怎麼樣有一個處理顯示登錄活動或主要活動的活動: LaunchActivity - > LoginActivity和LuanchActivity - > MainActivity 首先,它啓動LoginActivity。登錄成功後,登錄活動結束並消失,啓動器顯示主要活動 – user175750 2009-09-30 19:19:23