Java 用线程填充listview?

Java 用线程填充listview?,java,android,multithreading,Java,Android,Multithreading,我正在开发一个“聊天”应用程序,它从数据库(firebase实时数据库)检索一些数据(消息),进行一些操作,然后填充一个listview,以便在屏幕上显示它们。我有两种类型的消息: 第一种类型是文本消息,对它们的操作非常短,不会花费很长时间。 第二类是图片。对它们的操作比对文本的操作长(几秒钟) 当活动开始时,应用程序从数据库检索所有消息,并且必须对其中的每一条(文本和图片)进行操作。在我们在屏幕上看到任何东西之前,它必须完成对所有消息的操作,然后这需要很多时间 我的问题是:有没有办法在不同的线

我正在开发一个“聊天”应用程序,它从数据库(firebase实时数据库)检索一些数据(消息),进行一些操作,然后填充一个listview,以便在屏幕上显示它们。我有两种类型的消息: 第一种类型是文本消息,对它们的操作非常短,不会花费很长时间。 第二类是图片。对它们的操作比对文本的操作长(几秒钟)

当活动开始时,应用程序从数据库检索所有消息,并且必须对其中的每一条(文本和图片)进行操作。在我们在屏幕上看到任何东西之前,它必须完成对所有消息的操作,然后这需要很多时间

我的问题是:有没有办法在不同的线程中填充每个项目?喜欢在屏幕上看到文本消息(因为对它们的操作很快),然后在每个消息在自己的时间完成时看到图片(与我们在所有图片完成加载之前看到文本的网站的想法相同)。当然,消息需要以与在数据库中相同的顺序出现(实际上,我使用onchildaded()函数检索它们)

我真的希望这是清楚的,如果不是,我将很高兴澄清任何一点


谢谢大家

将它们定义为不同的线程:

[...]recive messages

if (/*message an image?*/) {
  new Thread(() -> {
    //Do something
  }).start();
} else {
  new Thread(() -> {
    //Do something else
  }).start();
}

将它们定义为不同的线程:

[...]recive messages

if (/*message an image?*/) {
  new Thread(() -> {
    //Do something
  }).start();
} else {
  new Thread(() -> {
    //Do something else
  }).start();
}

此解决方案不会保持消息在数据库中显示时的原始顺序。如果文字信息在图片之前完成,那么将在listview上创建一个项目,并且顺序将更改。为什么不在图片之前对其进行排序?我不知道你的计划是如何组织的,但这应该不会那么难。将它们添加到队列中或仅保存邮件发布时间。您也可以只使用占位符图像(大多数聊天应用都会这样做)并在图像准备好后将其替换。将它们排序到容器中似乎是一个很好的解决方案。我试试看。谢谢你的回答!此解决方案不会保持消息在数据库中显示时的原始顺序。如果文字信息在图片之前完成,那么将在listview上创建一个项目,并且顺序将更改。为什么不在图片之前对其进行排序?我不知道你的计划是如何组织的,但这应该不会那么难。将它们添加到队列中或仅保存邮件发布时间。您也可以只使用占位符图像(大多数聊天应用都会这样做)并在图像准备好后将其替换。将它们排序到容器中似乎是一个很好的解决方案。我试试看。谢谢你的回答!