2012-03-21 98 views
0

我的库代码会将字节数组通知给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分钟后收到OutOfMemory例外。 使用Eclipse MAT堆转储显示堆的90%被更多的android.os.Message实例占用。

回答

5

您每次创建一个新的Message。这可能是导致你的问题。你应该做的是从使用HandlerMessage池得到一个Message

Message message = handler.obtainMessage(); 

这将让你分配所有的新内存。