LocalBroadcastManager和可能的安全相关问题

时间:2016-09-12 11:56:32

标签: android broadcastreceiver intentservice android-intentservice localbroadcastmanager

以下是我计划做的事情:

我有Activity我在其中注册BroadcastReceiver

private LocalBroadcastManager localBroadcastManager;
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
        //handle received data
        }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    LocalBroadcastManager = LocalBroadcastManager.getInstance(context);
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(ACTIVITY);
    localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter);
}

我有一个IntentService,它从网络上获取数据并对其进行处理。在下载数据和处理完成期间,服务通过发送广播消息来通知活动它正在做什么。下载数据和处理可能需要一段时间,具体取决于数据的大小。例如,最多可能需要20分钟。

   localBroadcastManager.sendBroadcast(new Intent(ACTIVITY).putExtra(ACTION, value));

通过在服务的IntentService内注册接收者,类似的方法用于向onStartCommand发送消息的活动。

这是经过测试并且工作正常。我已经阅读了关于全球BroadcastManager以及LocalBroadcastManager的内容,我对此方法的安全性表示担忧。请记住,我的需求与服务和活动之间的通信严格相关,以两种方式,主要使用可分配的对象。

我的问题是:

  1. 使用LocalBroadcastManager将数据从服务发送到活动可能会出现哪些安全问题?是否有任何情况下数据可能泄漏到另一个应用程序? LocalBroadcast真的是本地的吗?处理后的数据是私密的,这就是我担心的原因。

  2. 服务和活动之间是否有更优化的沟通方式?

2 个答案:

答案 0 :(得分:3)

  

从服务发送数据可能会出现哪些安全问题   使用LocalBroadcastManager进行活动?有什么情况吗?   数据可能泄漏到另一个应用程序?是LocalBroadcast吗?   本地?处理过的数据是私有的,这就是为什么我有我的   顾虑。

广播仅限于您的应用程序的处理。没关系。

  

服务和服务之间是否有更优化的通信方式?   活动?

另一种方式涉及招标服务和注册代表。我宁愿坚持LocalbroadcastManager

答案 1 :(得分:2)

  1. 正如documentation所说:
  2.   

    与发送全球广播相比,这有许多优点   sendBroadcast(意向):

         

    您知道您播放的数据不会离开您的应用,所以   不必担心泄露私人数据。

         

    不可能   其他应用程序将这些广播发送到您的应用程序,所以你没有   需要担心他们可以利用安全漏洞。

         

    更多   比通过系统发送全球广播更有效率。

    1. 有一种更先进的方法可以在服务和活动之间建立连接:Service Binding(另请注意附加说明!)
    2. 使用意图限制您使用Bundle在活动和服务之间传递数据,但是绑定情况并非如此。