我想从android手机的桌面接收图像流。当我在我的线程中放入decodeStream()方法,然后将decodestream()放入runOnuiThread()以显示在imageView中时,它需要7秒多的时间。但是,当我尝试直接从资产读取图像并转换为输入流,然后decodeStream()时,它可能需要500ms,我不知道它为什么会发生。图像是100K。为什么DecodeStream(stream)在线程中比在主线程中花费更长的时间?
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
SocketConnect = new socketConnect();
SocketConnect.connectsocket("134.129.125.126", 8080);
while (true) {
data = new byte[2048 * 2048];
try {
read = SocketConnect.getInputStream().read(data, 0,
data.length);
input = SocketConnect.getInputStream();
System.out.println("getInputStream()");
bitmap = BitmapFactory.decodeStream(input);
System.out.println("decodestream()");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
System.out.println(e);
}
runOnUiThread(new Runnable() {
public void run() {
image.setImageBitmap(bitmap);
System.out.println("setImage at less than 500");
}
});
}
}
});
thread.start();
客户端应该在5秒内发送图像。 如果我尝试从资产中读取相同的图像,则立即显示图像。
try {
inputasset=getAssets().open("good1.jpg");
Bitmap bit = BitmapFactory.decodeStream(inputasset);
image.setImageBitmap(bit);
} catch (IOException e) {
TODO Auto-generated catch block
e.printStackTrace();
}
socketConnect类
public class socketConnect {
private Socket clientSocket;
private InputStream input;
private Bitmap bMap;
public InputStream getInputStream() {
return input;
}
public void connectsocket(String ipString, int port)
{
System.out.println("starts");
try {
// clientSocket = new Socket("134.129.125.172",8080);
System.out.println("starts");
clientSocket = new Socket(ipString, port);
System.out.println("AsyncTask: Connect to 134.129.125.126");
input = clientSocket.getInputStream();
System.out.println("AsyncTask: get the inputStream");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
现在我正在尝试使转换不会延迟,为什么延迟只发生在线程中。 – user3799770 2014-10-16 20:53:50