2013-12-18 2 views
0

Я использую BroadcastReceiver в моем Android приложение, которое просто содержит следующий фрагмент кода:Android sendBroadcast - ожидание BroadcastReceiver закончить

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.

С кодом, который до сих пор был простым, только создавая сообщение тоста, я не могу поймать логическое значение от GcmIntentService.isHandled, как только вызывается sendBroadcast.

Возможно ли каким-либо образом определить, закончен ли код для моего приемника. Я понимаю, что sendBroadcast - это асинхронный вызов, и я до сих пор использую Thread.sleep(1000), чтобы дождаться значения isHandled, но было бы неплохо, если бы был более надежный метод для достижения этого.

Любые мысли?

+0

Где вы вызываете 'Thread.sleep()'? –

+0

в моем классе 'GcmIntentService', который расширяет' IntentService' – Zishan

+0

Вам нужно показать больше кода. Ваша архитектура неясна, и ваша проблема также неясна. –

ответ

2

Ваш вопрос можно разделить на две части:

1.How знать, что если есть приемник на самом деле получил передачу.

2.Кроме того, должен ли приемник уведомлять службу о том, что сообщение было обработано.

Кажется, трудно достичь первой цели с помощью стандартного Intent api, вместо этого я предлагаю вам попробовать «шаблон наблюдателя».

Вы можете создать глобальный Observable объект в приложение и сделать вашу активность реализует Observer, зарегистрировать себя в OnCreate() и UNREGISTER в onDestory(). Внутри службы вы можете проверить, есть ли активность проходит через countObservers(), а затем просто сообщите об этом.

Смежные вопросы