0

这是我计划做的事情:

我有我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

这是经过测试的并且工作正常。我已经阅读了有关 globalBroadcastManagerLocalBroadcastManager的信息,并且我担心这种方法的安全性。请记住,我的需求与服务和活动之间的通信严格相关,这两种方式都主要使用可打包的对象。

我的问题是:

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

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

4

2 回答 2

3

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

广播仅限于您的应用程序的处理。那里没有问题。

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

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

于 2016-09-12T12:01:01.300 回答
2
  1. 正如文档所说:

与使用 sendBroadcast(Intent) 发送全局广播相比,这具有许多优点:

您知道您正在广播的数据不会离开您的应用程序,因此无需担心泄露私人数据。

其他应用程序不可能将这些广播发送到您的应用程序,因此您不必担心它们会利用安全漏洞。

它比通过系统发送全局广播更有效。

  1. 有一种更高级的方法可以在服务和活动之间建立连接:服务绑定(另请参阅附加说明!)

对于意图,您只能使用 Bundle 在活动和服务之间传递数据,而对于绑定,情况并非如此。

于 2016-09-12T12:09:42.307 回答