我的库代码会将字节数组通知给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();
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是我在5到10分钟后出现了外存.使用Eclipse MAT堆转储显示,90%的堆被更多的android.os.Message实例占用.
你Message每次都在创造一个新的东西.这可能是导致您的问题的原因.你应该做的是得到一个Message来自Handler的Message使用池:
Message message = handler.obtainMessage();
Run Code Online (Sandbox Code Playgroud)
这将使您无法分配所有新内存.
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |