我在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执行的是什么操作?
getData()是调用背地方法读取硬件信息的一个方法。我是开启一个线程,进行读取这个硬件的信息,然后将这个信息发送给HANDLER进行处理。基本上就是这么个流程。
@车边の小站:那这个getData是个无阻塞的方法对吗?
如果是个无阻塞的并且执行速度很快的方法,你的写法占内存很正常,而且需求也不是非常实时的获取这个硬件信息。推荐两种解决方案:
1.直接在while里加个Thread.sleep(100)操作。
2.使用Handler.postDelayed(runnal,delayMillis),设置延时任务,你的runnal内部根据READ_FLAG判断是否要继续调用Handler.postDelayed(runnal,delayMillis)实现循环。
推荐第二种。
如果你的需求是要实时获取硬件信息,并且在硬件信息更改时第一时间获取,更好的解决方案是通过回调函数主动通知主线程。