从广播接收器以及应用程序访问数据库

时间:2015-09-18 03:03:31

标签: java android android-contentprovider

我构建了一个简单的应用程序,它接受用户输入的数据并将其保存到本地sqlite数据库。如果wifi连接可用,它将把数据传输到托管在远程服务器上的REST服务。

我已完成上述部分并且工作得非常好。如果WIFI不可用,它将继续前进,并期望用户获得新数据。

当无线网络可用时,我已经注册了一个广播接收器,它将点击我的数据库并获取存储的值并将它们发送到远程服务器。

我想知道,当广播接收器试图查询我的数据库时,如果用户同时输入数据并且它被保存在同一个数据库中,它是否会触发SQLException。

我记得,一次只能有一个服务访问SQL实例。如果它会造成问题我该如何克服它。我看过ContentProviders,这会是解决方案吗?

我对android很新。请指教。

1 个答案:

答案 0 :(得分:1)

你可能想看看这个。

What are the best practices for SQLite on Android?

对我来说,无论您是否需要向外部应用程序提供数据,我建议您在需要数据库时始终与DatabaseHelper一起创建ContentProvider。实际上并不困难,我用来构建我的ContentProvider的最佳参考是DeskClock,Android的官方应用程序。

修改 作为旁注,您应该考虑创建一个由Boardcast接收器调用的IntentService来完成工作,因为广播接收器不应该用于长时间运行的任务,比如将内容发送到服务器。

BroadcastReceiver#onReceive

  

当它在主线程上运行时,你永远不应该执行长时间运行   其中的操作(系统超时10秒)   允许在考虑接收器被阻止和候选人之前   被杀死了。