我在Android开发中。开启了一个线程,这个线程是无限循环的。并且在这个线程里,我通过创建Handle的Message对象,然后handler.sendMessage(msg)。可是这样一来,LOGCat上就一直出现GC_CONCURRENT。请问我该怎么修改代码,或者用哪种方式才能即实现功能,又能减少GC的调用。
具体代码如下:
//线程
private class getData_thread extends Thread {
private Handler handler;
public read_thread(Handler h) {
this.handler = h;
}
Message msg = null;
@Override
public void run() {
while (READ_FLAG) {
msg = Message.obtain();
msg.obj = getData();
handler.sendMessage(msg);
super.run();
}
}
}
private static class dataHandler extends Handler{
@Override
public void handleMessage(Message msg) {
if (msg.obj != null) {
disposeData((byte[]) msg.obj);
}
super.handleMessage(msg);
}
}
无限循环...太恐怖了。先从业务上分析,另外看getData对象多大
无限循环有点夸张了吧,你应该是想通过修改READ__FLAG来判断什么事情的吧,你试试停顿在线程中停顿点时间试试?或许也可能是你的disposeData函数有问题吧?其实你为啥不写一个回调方法呢,当Read_Flag变化的时候回调一个方法,执行,类似与监听一样的东西,比这应该会好一点吧
恐怕是无限循环中产生了太多对象,占用内存过高,使得GC一直运行。刘靖靖 同学的用法结合自己的业务进行变化,能用回调是最好的了,也让该线程用简单的生产者消费者模式的线程锁机制来改写,再次就是让线程短暂停顿一些时间如sleep后,再继续接收信息咯~
既然有while又为什么要来一个递归呢?你这样递归和循环不出GC问题才怪了