В приложении для Android я зарегистрировал приемник в onCreate MainActivity.
IntentFilter mFilter = new IntentFilter("Action");
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, mFilter);
В его onResume
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Intent i = new Intent("Action");
LocalBroadcastManager.getInstance(MainActivity.this).sendBroadcast(i);
}
});
}
}).start();
Честно говоря, я не уверен, почему мы хотели использовать поток как таковой (я скопировал код откуда-то, не полностью его переваривая).
Это приложение поддерживает ViewPager, поэтому в связанном с ним фрагменте onCreate
IntentFilter mFilter = new IntentFilter("Action");
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, mFilter);
Как в классе MainActivity, так и в классе Fragment получатель выглядит так:
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
...
}
В обоих классах различается только то, что находится внутри onReceive.
Я не слишком хорошо знаю, как работает LocalBroadcast, я ожидал, что оба обработчика приемника будут запущены после того, как будет отправлена трансляция. Вместо этого я заметил, что в большинстве случаев запускается только приемник в MainActivity, иногда в классе фрагментов.
Я предполагаю, что есть что-то делать с частью резьбы.