2010-09-07 54 views
1

我正在開發一個android應用程序(如果您需要更多信息http://www.txty.mobi),並且在對話管理方面存在一些問題。我對Android很陌生,所以我的做法完全錯誤。如果是這種情況,請只是這樣說,然後指向我要遵循的正確文檔。Android對話框管理

背景:

該應用的主要塊迄今爲止是一個活動和一個服務(從IntentService派生)。 活動只需兩次與服務交互:啓動/停止服務。意圖服務將使用AlarmManager自行調節其使用期限。

的典型流上開始,當點擊/停止:

1)它的onResume活性寄存器的廣播接收器,以由所述服務發送的事件(註銷它在的onPause)

2)活動開始一個不確定的進度對話框

3)的activty發送一個單杆警報事件(無論是啓動或停止),將被髮送**馬上到服務

4)服務做什麼需要做的,開始

5)服務發出廣播事件基本上說「完成」

6)活動接收此事件併除去對話框。

問題:

活動會失去它的前臺狀態,比方說,如果用戶切換焦點或接收呼叫,因此在onPause方法被調用(在這一點上活動可能甚至是被系統殺死以聲稱記憶)。顯然,如果是這種情況,活動將永遠不會收到其廣播事件,因爲接收方已被註銷。這會使應用程序處於尷尬境地,當活動重新回到前臺時,會出現一個您無法完成的對話,也永遠無法擺脫。

的(可能嗎?)解決方案:

我現在處理這個(除了保持到位廣播接收器)是由創建使用偏好的工具類,跟蹤其操作的方式正在執行及其狀態:

活動
- 在的onResume使用我的工具類獲取操作的活動正在等待
名單- 檢查他們的狀態
- 如果他們完成相應的一些行動(在我的情況下襬脫對話!)
- 從首選項中刪除操作。 - 就在向服務請求操作之前,使用我的實用程序類將其保存到首選項。

服務
進行操作,並使用我的實用工具類保存操作狀態的偏好。 發出廣播。

災難發生!

現在這節省了我在正常情況下,但如果發生災難(即與任務殺手應用程序,你殺了一切)服務可能會被殺害之前,它可以保存操作的狀態我卡住像以前一樣該活動將認爲操作仍在進行,因此它不會觸及對話框)。所以現在我增加一個解僱按鈕到非常對話框,以防萬一:)

現在所有這些看起來太複雜了,我覺得應該是一個相當普遍的事情。這就是爲什麼,正如在帖子開頭所說的那樣,我可能(很可能!)完全錯誤。
任何想法?道歉,如果這個問題已經被問到,我環顧四周,但沒有發現任何東西。請在線向我指出解釋這一點的任何資源。

感謝和抱歉lenghty後:P

盧卡

回答

1

您是否嘗試過使用StickyBroadcast?這緩存了最新的廣播,因此可以收到onResume。請參閱this post

+0

謝謝!形成文檔正是我需要擺脫我寫的實用課程。我會盡快嘗試。 – lucabox 2010-09-07 17:37:47

+0

我的榮幸。請記住接受這個答案,如果它解決了你的問題。 (這會鼓勵其他人在未來回答你的更多問題) – 2010-09-07 17:46:57

+0

我終於設法嘗試了StickyBroadcast方法,儘管它簡化了我的代碼(不再需要訪問偏好,但以增加一個權限爲代價:** BROADCAST_STICKY **)我想我仍然需要在不確定的進度對話框上有一個「Dimiss」按鈕,因爲(與我的方法一樣),如果gets服務被殺死,那麼它將不會發送廣播,並且UI將被卡住這個對話框nobody將永遠刪除,使應用程序無法使用。可能我需要添加一個「超時」。我將檢查任務殺手級應用程序是否可以終止服務,如果不能,那麼我只是過度工程:) – lucabox 2010-09-09 09:18:29