Android渲染作业回调与ImageView关联

Android渲染作业回调与ImageView关联,android,listview,asynchronous,render,thrift,Android,Listview,Asynchronous,Render,Thrift,我遇到了一个问题,那就是如何找到一个最理想的解决方案,将我异步(而不是通过下载)接收到的位图设置为复杂布局中的多个ImageView。这主要是在ListView中完成的,但可以跨越共享同一图像的多个ListView。我使用Thrift与图像渲染过程进行数据通信(我无法更改)。我必须发出图像渲染请求,并等待回调,该回调包含在共享内存中我可以提取图像数据字节的位置。因此,节俭请求方法可能如下所示: long renderID = thriftClient.openRenderRequest(rend

我遇到了一个问题,那就是如何找到一个最理想的解决方案,将我异步(而不是通过下载)接收到的位图设置为复杂布局中的多个ImageView。这主要是在ListView中完成的,但可以跨越共享同一图像的多个ListView。我使用Thrift与图像渲染过程进行数据通信(我无法更改)。我必须发出图像渲染请求,并等待回调,该回调包含在共享内存中我可以提取图像数据字节的位置。因此,节俭请求方法可能如下所示:

long renderID = thriftClient.openRenderRequest(renderRequest);
public void onJobUpdate(JobUpdate job) ...
其中renderRequest包含我想要渲染的内容的ID信息和我需要的维度(ID不是Android中的视图ID,而是特定于基于配置渲染图像的方式)。返回值是与此请求关联的ID,在查看回调数据时使用。我使用这个renderID作为我在请求中发送的内容(我需要的图像ID)的键,然后,在稍后的某个时间点,我将收到如下回调:

long renderID = thriftClient.openRenderRequest(renderRequest);
public void onJobUpdate(JobUpdate job) ...
其中,我获取的JobUpdate对象包含我从初始请求中获取的renderID和我可以用来“提取”图像数据的共享内存位置(使用JNI,对我来说是一种抽象)。现在我可以通过“查找”这个renderID来判断我提交请求时给出的renderID所呈现的图像。通过这样做,我可以跟踪视图并相应地更新它。为此,我使用一些自定义对象,其中包含一个引用、一个图像视图和图像的ID(包含在渲染请求中)。我基本上有一个所有这些映射的大列表,并触发图像更新,传递位图和我想要更新的ID。这里的问题是,这些对象中的每一个都会运行这个方法(所有对象都有相同的接口),即使它们没有相同的ID。这看起来效率很低,我希望有一个更简单的方法。此外,在处理ListView时,它会变得不稳定,因为视图会被回收,我需要关闭旧请求并生成新的渲染请求。在这种情况下,竞争条件可能发生在这些列表视图中


我还尝试保留对视图的引用,并将其绑定到提交请求时获得的renderID(使用HashMap)。这就是我在ListView中真正获得竞争条件的地方,因为视图是循环使用的。有时,我会在此处显示错误的图像,因为在清空ImageView位图区域(在UI线程中)并使用另一个工作线程关闭渲染作业之前,我可能在工作线程上收到了作业更新。感谢您的帮助

有什么想法就好了