代码之家  ›  专栏  ›  技术社区  ›  J.E.Y

两个android LocalBroadcast接收器,一个在MainActivity中,另一个在片段中

  •  1
  • J.E.Y  · 技术社区  · 10 年前

    在一个android应用程序中,我在MainActivity的onCreate中注册了一个接收器

    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,因此在其关联的Fragment的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中的接收器运行,偶尔也会运行fragment类中的接收器。

    我的直觉是,这与螺纹部分有关。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Janki Gadhiya    10 年前

    这种行为背后的原因可能是 活动和碎片的生命周期 :

    根据我的经验,当您有Activity+Fragment时,如何调用方法是:

    1. 活动的 onCreate()
    2. 活动的 onStart()
    3. 活动的 onResume()
    4. 碎片的 onCreateView()
    5. 碎片的 启动()
    6. 碎片的 打开恢复()

    解释 :

    当您从广播时,您的片段尚未初始化 打开恢复() 在Activity中,最初无法由 片段,但仅由活动接收。之后,碎片 初始化后,碎片也将接收广播。

    推荐文章