2016-03-08 50 views
0

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

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

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

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

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

编辑:

这里是什么我试着去实现一个伪代码:

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

有些回调像

onServiceUpdateRecieved(){ 
       //Update UI 
    } 
+0

您可以使用[SharedPreferences](http://developer.android.com/training/basics/data-storage/shared-preferences.html)条目来标记状态 – denispyr

+0

@denispyr哦。有没有isRunnjng()方法我可以使用? –

+0

您也可以使用SharedPReferences按顺序标记哪个_id是插入的最后一个,哪个是最后一个上载/排队。 – denispyr

回答

1

你可以使用Intent来广播新的时间表(由活动发送,由服务接收)或实际上传结果(由服务发送,由活动接收,如果活动)

+0

谢谢。使用意图我能解决我的一些问题。 –

0

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