這裏還有一個問題要問你:)安卓:在循環解碼JPG格式:隨機凍結
基本上我做了一個實時流媒體服務,發送多個JPEG文件到我的Android應用程序,讓我們從他接受他們儘快對其進行解碼。
// dIn is DataInputStream
// videoFeed is an ImageView
// bitmap is Bitmap
// hand is an Handler of the main thread
//CODE EXECUTED IN ANOTHER THERAD
byte[] inBuff = new byte[8];
byte[] imgBuff;
String inMsg;
while(socket.isConnected()) {
dIn.readFully(inBuff);
inMsg = new String(inBuff, "ASCII").trim();
int size = Integer.parseInt(inMsg);
imgBuff = new byte[size];
dIn.readFully(imgBuff);
out.write("SEND-NEXT-JPEG".getBytes("ASCII"));
bitmap = BitmapFactory.decodeByteArray(imgBuff, 0, size);
hand.post(setImage);
}
}
private Runnable setImage = new Runnable() {
@Override
public void run() {
videoFeed.setImageBitmap(bitmap);
}
};
的問題是,經過大約10或20的JPEG文件實時解碼完美,應用程序凍結了400毫秒左右,然後繼續在另一個之前凍結其他10/20 JPEG文件解碼...
我知道發送多個jpeg不是流式視頻的好方法,但我只能更改客戶端(android應用程序),而不是服務器。
您對獲得流暢視頻並避免死機有任何想法嗎?謝謝!
我的猜測是你因垃圾收集而被凍結。檢查LogCat以查看哪些消息出現在那裏,並使用Traceview確定您在哪裏花費時間。 – CommonsWare
@CommonsWare感謝您的回覆,我無法看到任何GCC登錄logcat ... – Suxsem
@CommonsWare無論如何,我認爲你是對的,你知道一種方式來重新使用相同的資源,而無需爲每個decodeByteArray調用分配其他空間嗎? – Suxsem