今天工作碰到一個問題,一個留言界面要實現實時聊天。
我思路是開啓一個線程,每隔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();
}