我有一个应用程序目前上传图像到服务器。要上传这些图片,我使用了一个AsyncTask,它可以正常工作。它上传图像,显示通知以及进度。对于多个图像,创建单独的异步任务。但我需要更多的东西:后台服务执行上传
- 而不是创建多个AsyncTasks,我想排队在同一个线程的上传。
我认为背景服务是我需要的。我的问题是我可以使用服务来完成这些任务:
- 当UploadActivity打开时,它会检查服务是否正在运行。如果服务正在运行,它会更新UI以显示当前正在上传的图像。 (我维护一个用于上传的SQLite数据库,所以如果我能检测到服务正在运行,我可以从表中获取结果以查看哪些文件在队列中)。
- UploadActivity包含一个RecyclerView,它显示尚未上传的文件。触摸一个项目也应该检查服务是否正在运行。如果服务没有运行,它应该启动服务,并排队触摸的项目上传。如果服务正在运行,那么它只是将文件排队以便上传。
- UploadActivity应该不断接收来自服务的更新,以便用户获得上传进度的视图(这将显示在通知面板中,但我需要进度和其他细节也显示在活动中) 。
我的主要障碍是检测服务是否正在运行。另外,是否有可能让服务知道我已经向队列中添加了另一个文件(将文件添加到队列中只是将SQL插入到表中。一旦活动说明文件具有该服务,服务应该将新文件附加到队列中被添加)
编辑:
这里是什么我试着去实现一个伪代码:
Service service = new Service();
If service.isRunning{
service.itemAddedToQueueAndUpdateNotification()
}else{
service.start()
}
有些回调像
onServiceUpdateRecieved(){
//Update UI
}
您可以使用[SharedPreferences](http://developer.android.com/training/basics/data-storage/shared-preferences.html)条目来标记状态 – denispyr
@denispyr哦。有没有isRunnjng()方法我可以使用? –
您也可以使用SharedPReferences按顺序标记哪个_id是插入的最后一个,哪个是最后一个上载/排队。 – denispyr