我的库代码会将字节数组通知给UI,后者依次排队。另一个线程将使字节数组出列,并使用处理程序包实例将字节数组发送到更新UI。
使用处理程序更新UI的代码段
public void run(){
while(running){
try {
byte[] msg=(byte[]) queue.getMsg();
Message message=new Message();
Bundle bundle=new Bundle();
bundle.putByteArray("img",msg);
message.obj=bundle;
handler.sendMessage(message);
message=null;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但问题是我在5到10分钟后出现了停机故障。 使用Eclipse MAT堆转储显示90%的堆被更多的android.os.Message实例占用。
答案 0 :(得分:5)
您每次都在创建一个新的Message
。这可能是导致您的问题的原因。您应该做的是使用以下内容从Message
的{{1}}池中获取Handler
:
Message
这将使您无法分配所有新内存。