如何从 Fragment 临时获取 IntentService 的锁

How to temporarily acquire lock for IntentService from Fragment

我有 IntentService 用于按顺序将照片文件上传到服务器。我有图库片段显示上传队列中的文件和已上传到服务器的文件。我使用 api-调用服务器获取已上传文件的列表。要上传的本地文件只是存储在数据库中。

下一个文件上传后 - IntentService 将事件发送到图库片段。之后我可以隐藏上传文件的进度轮并从数据库中删除关于该文件的记录。这部分效果不错。

出于同步原因,我想在 api- 获取远程文件的请求正在进行时阻止来自上传服务的所有事件(让它们等待)。

我担心的是 - 某些文件可以在请求远程文件的同时上传,我将放弃该事件。如何延迟从服务传送事件直到 api-请求完成?

在你的片段中你可以这样做:

boolean isRequestingAPI = false;
.
.
.

//Requesting API on server

isRequestingAPI = true

synchronize(isRequestingAPI){
   // do request API here


   //You get callback from API 
   isRequestingAPI = false;
}

.
.
.

//Getting event from Service

private void onEventFromServceListener(){

   if(isRequestingAPI){
       //Put event/data in a queue and consume it when when you get callback from API
   }
   synchronize(isRequestingAPI){
       //do whatever your want to do with event from service
   }
}

通过使用 synchronize(isRequestingAPI),您的 API 调用和来自服务的事件将成为相互排斥的事件。每个事件都会等待其他事件先完成。