0

我正在刺探一個具有後臺服務的大型程序,而且我正在使用基本的Handler對象實現一個(相當糟糕的)消息處理過程。該應用程序有一個主菜單,其中包含啓動6個不同活動的按鈕。消息處理,與工作線程的意外行爲

問題是這樣的:如果我啓動一個工作線程,它啓動對數據庫的查詢並檢索一些數據,並關閉啓動上述工作線程的活動,則活動中的處理程序仍會嘗試運行並顯示一個對話框,即使創建它的活動現在已完成(或未聚焦)。如何在提交任何(UI)更改之前判斷當前的Activity是否處於焦點狀態?

我最終通過簡單地將'showDialog()'調用放在一個try語句中解決了這個問題,但我想要一個更復雜的解決方案,因爲這看起來似乎是錯誤的做法。

回答

0

使用sendBroadcast(),與Activity通過registerReceiver()onResume()註冊的廣播一BroadcastReceiveronPause()中註銷。然後,它只會處理事件,如果它在前臺。

+0

這需要我完全重寫我的消息處理,但這是預期的。 – moonlightcheese 2011-06-07 21:49:34

0

onPause()中放置一些標誌,以啓動線程以指示它不再處於前景狀態。在onStart()反轉旗幟。

當它是顯示對話框的時候,檢查這個標誌並且只在活動正在運行時顯示對話框。