今天工作碰到一个问题,一个留言界面要实现实时聊天。
我思路是开启一个线程,每隔1s就调用一次拿取聊天信息的接口,写个while语句。
一开始,我没有考虑到控制这个while的条件,我发现我退出这个界面,甚至我退出我的app,这个进程竟然还在跑,这就造成了内存泄漏。
后来我在onDestroy()方法里将while的条件设置为flase,这个thread就跑完了,跑完了也就完美的销毁了。
我之前想线程的stop()方法呀,destroy方法都过时了。强制中断线程不太好,果然还是让他跑完好啊。
下面贴代码
private Thread thread;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x1242) { //刷新聊天界面 HttpUtils.getInstantce().getMessageOrderListByOrderSn(doctorMessageOrderItemUser.getOrderSn(), new HttpConstant.SampleJsonResultListener<Feedback<List<DoctorMessage>>>() { @Override public void onSuccess(Feedback<List<DoctorMessage>> jsonData) { list = jsonData.getData(); myAdapter.notifyDataSetChanged(); } @Override public void onFailure(Feedback<List<DoctorMessage>> jsonData) { ToastUtils.showErrorMsg("获取信息失败!"); } }); } super.handleMessage(msg); } };
thread = new Thread(new Runnable() {
@Override
public void run() {
while (iscontinue) {
try {
Thread.sleep(1000);
Message msg = new Message();
msg.what = 0x1242;
handler.sendMessage(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
}
};
@Override
protected void onDestroy() {
iscontinue=false;
super.onDestroy();
}