如何避免处理程序中的内存泄漏?

时间:2012-03-21 18:02:20

标签: android

我的库代码会将字节数组通知给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实例占用。

1 个答案:

答案 0 :(得分:5)

您每次都在创建一个新的Message。这可能是导致您的问题的原因。您应该做的是使用以下内容从Message的{​​{1}}池中获取Handler

Message

这将使您无法分配所有新内存。