2016-06-11 35 views
1

在Android应用程序,我注册了一个接收器MainActivity的onCreate两个接收器的Android LocalBroadcast的,一个在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和片段类,接收器看起来像:

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

只有里面有什么的onReceive这两类不同。

我不太了解LocalBroadcast是如何工作的,我期待这两个接收者处理程序在发送广播后都会运行。相反,我注意到大多数时间只有MainActivity中的接收器运行,偶尔会在片段类中运行。

我的预感是与螺纹部分有关。

回答

0

后面这种行为的原因既可以是活动的生命周期以及片段

按我的经验,方法是如何被调用时,你有活动+片段:

  1. 活动的onCreate()
  2. 活动的onStart()
  3. 活动的onResume()
  4. 片段的onCreateView()
  5. 片段的onStart()
  6. 片段的onResume()

说明

,当您从 onResume()在活动广播你的碎片没有被初始化但它不能收到的第一个由 片段,但只收到行动ivity。之后,片段被 初始化后,广播也将被片段接收。

相关问题