2012-03-21 99 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(); 

這將讓你分配所有的新內存。