2013-12-18 57 views
0

我在我的Android應用它只是包含了下面的一段代碼使用BroadcastReceiver:如果我的活動運行的Android sendBroadcast - 等待廣播接收器來完成

public BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     GcmIntentService.isHandled = true; 
     Toast.makeText(context, "broadcast receiver test", Toast.LENGTH_SHORT).show(); 
    } 
} 

我使用這個接收器確定並在ListView中執行一些更新,而不需要GcmIntentService生成任何通知。

由於代碼很簡單,只創建Toast消息,我無法在調用sendBroadcast時立即從GcmIntentService.isHandled中捕獲布爾值。

是否有可能以任何方式確定我的接收器的代碼是否已完成運行。據我所知,sendBroadcast是一個異步調用,目前我正在使用Thread.sleep(1000)來等待isHandled值,但如果有更可靠的方法來實現這一點,那將會很不錯。

有什麼想法?

+0

你在哪裏調用'Thread.sleep()'? –

+0

在我的'GcmIntentService'類中擴展了'IntentService' – Zishan

+0

你需要顯示更多的代碼。你的架構不清楚,你的問題也不清楚。 –

回答

2

你的問題可以分爲兩個部分:

1.How知道,如果有一個接收器實際接收的廣播。

2.接收方如何通知服務該消息已被處理?

似乎很難通過標準的Intent API實現第一個目標,相反,我建議你可以嘗試「觀察者模式」。

你可能在你的應用程序創建一個全局Observable對象,使您的活動實現Observer,在onDestory()。裏面的服務,您可以檢查是否有通過countObservers(),然後運行一個活動註冊本身的onCreate()和註銷只需通知它。