问题是这样的:
 我们在做一个聊天软件,需要监听对方发来的消息,这里用到了一个监听器,但是刚开始是可以监听的,当dalvikvm执行了GC_CONCURRENT回收操作之后,便不能再监听了,是因为这个监听器对象被回收了吗?
我怎么才能看到dalvikvm回收的对象有哪些呢?还有,我的程序里面创建的对象并不是很多,为什么会触发GC_CONCURRENT垃圾回收事件呢?求解释监听器代码:
class NewMessageListener implements MessageListener{ private Handler handler ;
private Context context;
public NewMessageListener(Handler _handler, Context _context){
this.handler = _handler;
this.context = _context;
}
public NewMessageListener(){}
@Override
public void processMessage(Chat chat, Message message) {

MessageBean messageBean = new MessageBean();
messageBean.setMessageBody(message.getBody());
messageBean.setMessageFrom(message.getFrom());
messageBean.setMessageTime("("+sdf.format(new Date())+")");

logMessage(messageBean);
setAdapterList(handler,context);
}


}使用监听器的代码:
messagelistener = new NewMessageListener(_handler, _context);Android监听

解决方案 »

  1.   

    将 你的监听器同application “绑定”试试看
    还有 是否有内存泄露?
      

  2.   

    我找到原因了,的确是我的某个对象被回收了,这个对象上本身加上了消息监听器,但是被回收之后,监听器同时也就没有了,解决办法是将这个对象设置为全局的,而不是在方法里面新建new,这样,保证了对象的一致性,同时也减少了GC的调用次数。