Android 动态更新gridview中的对象从IntentService更新其属性

Android 动态更新gridview中的对象从IntentService更新其属性,android,android-intent,android-service,android-gridview,Android,Android Intent,Android Service,Android Gridview,我有一个GridView,其中每个项目都显示有关对象的信息。接下来,我有一个IntentService,其中包含一些可运行的任务。最后,还有一个自定义适配器,它是从BaseAdapter扩展而来的,带有项目的ArrayList。IntentService和Gridview之间的通信通过适配器中的BroadcastRecipver进行,适配器接收一个名为Thumb的特殊对象,Thumb是一个可包裹的对象,作为Intent的额外对象 到目前为止,一切都是典型的 现在,当任务在其runnable对象内

我有一个GridView,其中每个项目都显示有关对象的信息。接下来,我有一个IntentService,其中包含一些可运行的任务。最后,还有一个自定义适配器,它是从BaseAdapter扩展而来的,带有项目的ArrayList。IntentService和Gridview之间的通信通过适配器中的BroadcastRecipver进行,适配器接收一个名为Thumb的特殊对象,Thumb是一个可包裹的对象,作为Intent的额外对象

到目前为止,一切都是典型的

现在,当任务在其runnable对象内的服务中启动时,我发送一个空Thumb(如意图所示)。因此,GridView向用户显示一个表示此时正在执行的任务的项,当任务完成时,该项将用新信息刷新

我的问题是:如何在GridView中动态刷新对象的信息?

方法1 我的第一个想法(我认为性能上最昂贵的)是:当一个意图出现空拇指时,我将把它添加到ArrayList中,并通知适配器。然后,当第二个意图带有“full”Thumb时,我将在ArrayList中搜索它,并用另一个替换它

  • (+)易于实现
  • (-)表现不佳。我必须在ArrayList中搜索一个项目,检查它是否是同一个对象,然后替换它
方法2 如果“空拇指”和“满拇指”相同(因为在任务中只有一个拇指对象正在更新),则引用(内存地址)必须相同。因此,只需在第一次将空Thumb添加到GridView中,然后在intent中出现完整Thumb时,我将通知适配器刷新它(因为ArrayList已经有Thumb(引用))

  • (+)性能非常好,因为我不需要对ArrayList进行操作
  • (-)不起作用。(是的,一个很大的障碍)。所以我已经看到,如果我比较“空拇指”和“满拇指”之间的引用(=)是不同的。我认为这是因为Thumb是一个可打包的对象,它在不同线程的可运行任务中执行,当在内部进入BroadcastReceiver时,它会创建一个新对象或克隆Thumb。因此,对象是不同的。它是线程之间传递对象的“可序列化”机制
有没有关于如何解决这个问题的建议?

方法3 最后,我使用了一个中间解决方案(经常发生)

“空拇指”在GridView中具有所有相同的视图

因此,当它向ArrayList添加一个空Thumb时,它也会添加另一个列表,以保持空Thumb在ArrayList中的位置


接下来,当一个“满拇指”出现时,我得到这个新位置列表的第一个位置,然后我在数组列表中用这个位置的满拇指替换空拇指,最后我从位置列表中删除这个位置。

我认为性能上最昂贵的-你真的测试过这个位置吗,或者这是一个严格的意见(在这种情况下,您应该对其进行测试)?您的
Thumb
类是否具有可用于从其他Thumb对象中唯一标识对象的功能?我没有进行测试,因为第一种方法执行的操作更多(并且比第二种[作为列表中的搜索]更昂贵).我想生成一个像UUID或类似的ID,但最终我不需要它。下面我解释一下我最终是如何做到的。