用于执行上传的后台服务

时间:2016-03-08 16:56:18

标签: android background-service

我目前有一个将图像上传到服务器的应用程序。要上传这些图像,我使用AsyncTask,它可以正常工作。它上传图像,显示通知以及进度。对于多个图像,将创建单独的异步任务。但我需要更多的东西:

  • 我想在同一个帖子上排队上传,而不是创建多个AsyncTasks。

我认为后台服务是我需要的。我的问题是我可以使用服务来完成这些任务:

  • 当UploadActivity打开时,它会检查服务是否正在运行。如果服务正在运行,它会更新UI以显示当前正在上载的图像。 (我为上传维护了一个SQLite数据库,所以如果我能检测到服务正在运行,我可以从表中提取结果以查看哪些文件在队列中。)
  • UploadActivity包含一个RecyclerView,显示尚未上传的文件。触摸项目还应检查服务是否正在运行。如果服务未运行,则应启动该服务,并将触摸的项目排队以进行上载。如果服务正在运行,那么它只是将文件排队以进行上载。
  • UploadActivity应不断从服务接收更新,以便用户获取上传进度的视图(这将显示在通知面板中,但我需要在活动中显示进度和其他详细信息)

我的主要障碍是检测服务是否正在运行。此外,是否可以让服务知道我已经将另一个文件添加到队列中(将文件添加到队列只是表中的SQL插入。一旦活动说文件有,服务应该将新文件附加到队列中已添加)

编辑:

这是我想要实现的伪代码:

   Service service = new Service();
   If service.isRunning{
          service.itemAddedToQueueAndUpdateNotification()
   }else{
        service.start()
   }

还有一些像

这样的回调
    onServiceUpdateRecieved(){
              //Update UI
    }

2 个答案:

答案 0 :(得分:1)

您可以使用https://github.com/linvi/tweetinvi/wiki/Upload来广播新的时间表(由活动发送,服务接收)或实际上传结果(由服务发送,活动接收,如果有效)

答案 1 :(得分:0)

我建议使用执行程序服务并继续将图像添加到其队列中。每个上传任务将一个接一个地发送。它将更易于管理,您甚至可以为任务完成添加回调,并在需要时更新UI。