我想從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