【发布时间】:2012-07-06 08:19:55
【问题描述】:
我正在创建一个排队上传管理器。在this 回答我之前的问题指导后,我将使用服务来上传这些图像。建议我使用数据库来跟踪成功上传的文件和待处理的文件。
我最初的研究让我相信我想要创建一个绑定服务,这样我可以在照片上传后更新我的用户界面,以及一个启动的服务,这样它就可以独立于我创建的活动运行它。看来我还需要通过应用清单中的process=":something" 指令在自己的进程中启动它。
我的问题是,在 N 个活动客户端和上传服务之间共享 SQLite(除非有更好的方法)数据库的最佳方式是什么?
我设想它是这样工作的,在伪代码中:
// in an app
writeRecordToDb( . . . );
// start service
if( service doesn't exist )
{
// start service, and bind
}
// in the service:
if( shared db has another row )
{
doDownload( . . . );
if( download worked )
{
notifyActivity();
if( db has another row )
doDownload( . . . );
}
else
{
retryDownload( . . . );
}
}
这是解决此问题的正确方法吗?我再次尝试规避在几乎没有蜂窝信号时让多个 Activity 实例请求上传照片的问题。我刚刚读完服务和绑定服务文档,感觉很好,但不是很好。
【问题讨论】:
-
除了已经发布的答案之外,我从您链接的问题中看到,排队机制中的一个决定性因素是网络连接性。我使用
BroadcastReceiver来“监听”连接的变化并将其与IntentService耦合。我的Activities向IntentService发送网络请求,如果没有连接,它会将请求添加到队列并终止。每当BroadcastReceiver接收到“已连接”网络Intent时,它就会启动IntentService,然后处理之前排队的任何内容。
标签: android sqlite file-upload service ipc