2016-06-11 37 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。之後,片段被 初始化後,廣播也將被片段接收。

相關問題