有多少意向可以接收BroadcastReceiver?

有多少意向可以接收BroadcastReceiver?

问题描述:

我有一个接收每秒值的蓝牙服务,以及每10秒接收一个位置的GPS服务。所有这些数据必须储存在数据库中。为了避免这两项服务试图在数据库中同时写入数据,我创建了一个数据库服务来存储这些数据:蓝牙和GPS服务将它们的值发送到本服务的广播中,此服务将存储它们。我有几个问题:有多少意向可以接收BroadcastReceiver?

- 每秒多少次广播可以接收我的数据库? (使用广播接收器) - 如果我的数据库服务收到一个新值但尚未存储前一个值,会发生什么情况?

+0

我不知道每秒钟可以接收的广播数量,但是对于第二个问题,最简单的方法可能是为事件提供“队列”。每次你的数据库收到一个事件,它都会将它放入一个队列中。然后你有一个在后台运行的线程,并处理'Queue'来逐个插入元素。这样,您不会丢失任何要存储的信息,并确保每个元素都按照接收到的顺序插入。 – NSimon

将数据库包装在ContentProvider实现中。通常,当您希望能够将数据暴露在应用程序之外时使用它们,但它也提供了访问结构化数据的中心且有据可查的API。您可以在内容提供者的方法中保护您的数据库访问权限(例如insert(),delete()等等)。到达提供者的初始ContentResolver用法是您应该拥有的最大上下文切换命中。之后,幕后活页夹连接将短路并保持在同一过程中。

您发送Intent任何时候,该系统具有通信,以在system_server进程中运行ActivityManagerService。这种上下文切换是额外的开销,你不需要和可以避免。另外,不需要队列。只需在提供者实现中保护您的数据库访问。

+0

数据库将受到保护,只能有一个可以写入的服务。但是如果另一个服务尝试写入,请求将被拒绝或服务等待? 感谢您的回答。 – Gabriel

+0

对不起,我不明白你在问什么。使用两项服务可能比您需要的更复杂。 –

+0

对不起,我的英语不好 我有2个服务:一个用于蓝牙,一个用于GPS/stepcounter,并且都需要在数据库中写入。 如果我理解,使用Content Provider,数据库始终受到保护,即使2个服务试图同时写入也是如此? 我的问题是:如果BluetoothService正在编写,并且GPS服务想要写入(例如),如果我理解数据库将受到保护,但是会发生什么? GPS服务将等到第一次写入完成或不写入(GPS需要重试写入)? – Gabriel