2016-06-11 9 views
1

In einer Android-App registriert ich einen Empfänger in MainActivity der onCreateZwei Empfänger von Android LocalBroadcast, eine in MainActivity, das andere in einem Fragment

IntentFilter mFilter = new IntentFilter("Action"); 
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, mFilter); 

In seiner 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(); 

Ehrlich gesagt ich bin nicht sicher, warum wir einen Thread als solchen verwenden wollten (ich habe den Code von irgendwo kopiert, ohne ihn vollständig zu verdauen).

Diese App unterstützt ViewPager, also in seinem die zugehörigen Fragmente onCreate

IntentFilter mFilter = new IntentFilter("Action"); 
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, mFilter); 

Sowohl MainActivity und Fragment-Klasse, der Empfänger wie folgt aussieht:

private BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ... 
    } 

Nur was drin ist OnReceive in beiden Klassen unterscheidet.

Ich weiß nicht zu viel, wie LocalBroadcast funktioniert, ich erwartete, dass beide Empfängerhandler ausgeführt würden, sobald die Sendung ausgestrahlt wird. Stattdessen habe ich meistens nur den Empfänger in MainActivity bemerkt, der gelegentlich in der Fragmentklasse läuft.

Meine Ahnung ist, dass es etwas mit dem Thread Teil zu tun hat.

Antwort

0

Der Grund für ein solches Verhalten kann die Lifecycle of Both Aktivität sein sowie Fragment:

Wie pro meine Erfahrung, wie die Methoden aufgerufen werden, wenn Sie Aktivität + Fragment haben ist:

  1. Aktivität des onCreate()
  2. Aktivitäten onStart()
  3. Aktivität des onResume()
  4. onCreateView() fragments
  5. onStart() fragments
  6. onResume()

Erklärung des Fragments:

Als Ihr Fragment noch nicht initialisiert, wenn Sie von onResume() in Aktivität Rundfunk werden könnte es nicht sein, erhalten zuerst durch das Fragment aber erhalten nur durch Act Iktivität. Nachdem das Fragment initialisiert wurde, wird das Broadcast auch vom Fragment empfangen.