2012-03-21 2 views
0

Мой библиотечный код уведомит массив байтов к пользовательскому интерфейсу, который, в свою очередь, поставлен в очередь. Другой поток будет деактивировать байтовый массив и использовать экземпляр пакета обработчиков байтового массива и отправить сообщение для обновления интерфейса.Как избежать утечки памяти в обработчике?

фрагмента кода, который использует обработчик для обновления пользовательского интерфейса

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(); 
      } 

     } 

, но дело в том, я получаю OutOfMemory исключения после 5 до 10 минут. Использование кучи памяти Eclipse MAT показывает, что 90% кучи занято более экземпляром android.os.Message.

ответ

5

Вы создаете новый Message каждый раз. Вероятно, это то, что приводит к вашей проблеме. То, что вы должны делать это получение Message от Handler «s Message бассейна с помощью:

Message message = handler.obtainMessage(); 

Это будет держать вас от выделения все, что новая память.

Смежные вопросы