• android中LocalBroadcastManager的使用


          今天遇到一个acitivity之间通信的问题,因为我们是用TabActivity包裹了Activity(我们称之为A)。所以这两个Activity是同一时候存在的。当在TabActivity中启动其它Activity处理一些业务,当业务处理完毕时,通过onActivityResult()返回处理结果,我们须要依据返回的结果对A进行更新。可是如今问题就来了。我们怎么来更新A呢?

          我发现TabActivity的onActivityResult()是在A的onResume之前运行的,也就是说,我能够在TabActivity里做一些处理,在A运行onResume的时候来更新状态,我首先想到的是通过SharedPreference。通过写一个标识,让A来读取这个标识。

    可是这样的方式显然不能让我们惬意,通过写文件来传递状态并非非常好的做法。

          或者。我们能够通过广播的形式来传递状态,可是广播的操作太重。作为一个app,不应该做这样的系统级的操作,并且系统级的广播还会带来安全问题。一旦被其它应用捕获就有可能被利用。

           最后,从同事那里了解到有这么个东西,能够帮我们解决问题:LocalBroadcastManager。

           它来自android 的support包。类名是android.support.v4.content.LocalBroadcastManager。是用来在同一个应用内的不同组件间发送Broadcast的,刚好与我们的场景相符合。同一时候。它发送的广播仅仅在app内传播,不会泄漏到其它的应用,安全性也有了保证。并且它的使用方式非常easy,与普通的广播类似。

           使用方式例如以下,在接收方也就是我们的A,这样调用。

        ​    ​       BroadcastReceiver cameraPicBroadcastReceiver = new BroadcastReceiver() {

                       @Override

                       public void onReceive(Contextcontext, Intent intent) {

                           boolean isSuccessintent.getExtras().getBoolean(MConstants.KEY_LOGIN_SUCESS);

        ​    ​    ​    ​    ​    ​.......//更新状态

                       }

                   };

                   IntentFilter intentFilter = new IntentFilter( MConstants.KEY_INTENT_LOGIN_RESULT);

                   final LocalBroadcastManager  localBroadcastManager = LocalBroadcastManager.getInstance(ctx);

                   localBroadcastManager.registerReceiver(cameraPicBroadcastReceiver, intentFilter);

         广播的发送方的写法例如以下:

         ​    ​    ​    ​    ​ Intent   loginSucessIntent = new Intent();

                          loginSucessIntent.setAction(MConstants.KEY_INTENT_LOGIN_RESULT);

                          loginSucessIntent.putExtra(MConstants.KEY_LOGIN_SUCESS, false);

                          LocalBroadcastManager.getInstance(context).sendBroadcast(loginSucessIntent);

     LocalBroadcastManager是单例的,使用方式非常easy,它还能够解决Service和Activity的交互问题。

  • 相关阅读:
    目录
    DRF的分页
    Django Rest Framework 视图和路由
    爬虫基本原理
    C# System.Threading.Timer的使用
    C# Task的使用
    C# 线程池的使用
    C# 异步委托回调函数使用
    C#异步委托等待句柄的使用
    C# 异步委托的使用
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7090442.html
Copyright © 2020-2023  润新知