Java Android中的快速显示位图

Java Android中的快速显示位图,java,android,sockets,canvas,bitmap,Java,Android,Sockets,Canvas,Bitmap,我编写了一个小的客户机-服务器应用程序,它通过tcp传输位图。服务器部分的工作方式很有魅力,但在客户端,我不确定如何显示接收到的位图。每次收到新图片时,客户端后端都会调用活动中的一个方法,该方法应更新并显示位图…最高达25 fps。 最好的解决方案是什么 我编写了自己的视图,但调用了setContentView 对我来说不起作用,它没有显示位图,屏幕保持黑色,直到服务器关闭,然后一个图像才正确显示。我甚至试过这样的方法: this.image = (ImageView) findViewById

我编写了一个小的客户机-服务器应用程序,它通过tcp传输位图。服务器部分的工作方式很有魅力,但在客户端,我不确定如何显示接收到的位图。每次收到新图片时,客户端后端都会调用活动中的一个方法,该方法应更新并显示位图…最高达25 fps。 最好的解决方案是什么

我编写了自己的视图,但调用了
setContentView
对我来说不起作用,它没有显示位图,屏幕保持黑色,直到服务器关闭,然后一个图像才正确显示。我甚至试过这样的方法:

this.image = (ImageView) findViewById(R.id.imageView1);

(我编写了自己的BuffereImage类,它保存正确的位图)


即使使用image.invalidate(),在服务器关闭连接之前,也不会发生任何事情…

听起来您可能正在用户界面线程上执行网络IO。在这种情况下,在网络操作完成之前,UI中没有任何内容得到更新。如果是这样,您需要做的是创建一个线程来运行服务器IO,并让它使用要显示的帧回调UI线程。下面是一些关于线程和用户界面如何交互的一般信息,如果是这样的话,应该会有所帮助:


谢谢你的链接,我在发布这个问题后的第二天就有了这个想法。现在“后端”是一个自己的线程,用新的位图调用ui,但我有上面提到的相同问题:在我关闭服务器的那一刻显示的是唯一一张图片。你能发布更新版本的代码吗?可能还有其他原因阻止了位图的渲染。现在我尝试了AsyncTask类:公共类后端扩展AsyncTask{…protected Void doInBackground(Void…arg0){加载图片,调用ui显示}}}},在ui中:public Void setImage(BufferedImage bufImage){if(bufImage.hasBitmap()){this.image.setImageBitmap(bufImage.getBitmap());}}您现在只是从后台更新图像视图,而没有与UI线程同步。并且您误用了AsyncTask,这是用于单个更新任务的。您需要做的是post()a可运行到您要更新的视图,如下所述:好的,我知道了,谢谢您的帮助。解决方案是将可运行文件发布到内容中的ImageView:)
    public void setImage(BufferedImage bufImage) {
    if (bufImage.hasBitmap()) {
        this.image.setImageBitmap(bufImage.getBitmap());
    }
}