線程一定要讓他跑完,不然會內存泄漏

今天工作碰到一個問題,一個留言界面要實現實時聊天。

我思路是開啓一個線程,每隔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();
}

 

 

 

發佈了28 篇原創文章 · 獲贊 17 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章