以下是我计划做的事情:
我有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的内容,我对此方法的安全性表示担忧。请记住,我的需求与服务和活动之间的通信严格相关,以两种方式,主要使用可分配的对象。
我的问题是:
使用LocalBroadcastManager
将数据从服务发送到活动可能会出现哪些安全问题?是否有任何情况下数据可能泄漏到另一个应用程序? LocalBroadcast真的是本地的吗?处理后的数据是私密的,这就是我担心的原因。
服务和活动之间是否有更优化的沟通方式?
答案 0 :(得分:3)
从服务发送数据可能会出现哪些安全问题 使用LocalBroadcastManager进行活动?有什么情况吗? 数据可能泄漏到另一个应用程序?是LocalBroadcast吗? 本地?处理过的数据是私有的,这就是为什么我有我的 顾虑。
广播仅限于您的应用程序的处理。没关系。
服务和服务之间是否有更优化的通信方式? 活动?
另一种方式涉及招标服务和注册代表。我宁愿坚持LocalbroadcastManager
答案 1 :(得分:2)
与发送全球广播相比,这有许多优点 sendBroadcast(意向):
您知道您播放的数据不会离开您的应用,所以 不必担心泄露私人数据。
不可能 其他应用程序将这些广播发送到您的应用程序,所以你没有 需要担心他们可以利用安全漏洞。
更多 比通过系统发送全球广播更有效率。
使用意图限制您使用Bundle在活动和服务之间传递数据,但是绑定情况并非如此。