2017-05-22 61 views
0

我不擅长Android技术,因此我发布了一个问题。如何在Android中有效地与UI线程进行通信?

远程服务器在具有高频的TCP连接(最高可达30 fps)发送图片到Android设备。 Android设备将获取图片并将其显示在ImageView容器中(模拟视频)。

促使UI操作只从主线程使我得到了一些性能问题。现在,网络接收操作正在单线程中运行,根据docs将数据移动到每个接收到的PIC上的UI线程。

我有两个想法,更好的性能:

  1. 跳过一些图片(UI线程更新本身,并采取一些资源最新的框架与联网线共享)
  2. 不知何故进行优化的绘制过程(只是现在的我将位图分配给ImageView)

由于Android体验差,我无法确定是否赞赏此想法。因此,欢迎任何建议。 Thx。

+0

也许第二个线程从ConcurrentLinkedQueue或任何其他线程安全队列中读取并将轮询的图像发布到您的视图? – JacksOnF1re

+0

@ JacksOnF1re这可能是一个好主意(我正在考虑自己实现线程安全队列),我会测试它的性能。 但我认为,真正的里程碑是在绘制屏幕上的影像的方式(现在我建立从原料JPEG/PNG/BMP数据的位图,并将其分配给ImageView的)。 – f4f

+0

如果你有服务器的控制权,我会把它作为UDP视频流。 – nasch

回答

0

我可能是错的,但我不能看到多线程如何让你更好的(有用的)性能。我建议你减少图像或编码(在源),然后恢复 - 解码(在接收器上)。一个地方去这里:https://developer.android.com/topic/performance/network-xfer.html

但你必须问自己的图像,大小,如果你有一个大的形象,你真的需要它吗?你没有谈论它,这在大多数情况下很重要。像尺寸这样的参数很重要。本文可以帮助你,如果这是一个很好的选择:https://developer.android.com/topic/performance/graphics/load-bitmap.html

+0

当然图像在服务器上编码,而不是在接收机上解码。 我意识到图像大小很重要,但局域网连接允许以30+ fps传输足够的数据,而UI无法显示超过12-15 fps的数据。 多线程是必需的,只是因为网络连接无法在主(UI)线程来建立。 – f4f

相关问题