内存泄漏之thread浅析

来源:互联网 发布:nginx 1.8.0 编辑:程序博客网 时间:2024/05/30 02:22

今天工作碰到一个问题,一个留言界面要实现实时聊天。

我思路是开启一个线程,每隔1s就调用一次拿取聊天信息的接口,写个while语句。

一开始,我没有考虑到控制这个while的条件,我发现我退出这个界面,甚至我退出我的app,这个进程竟然还在跑,这就造成了内存泄漏。

后来我在onDestroy()方法里将while的条件设置为flase,这个thread就跑完了,跑完了也就完美的销毁了。

我之前想线程的stop()方法呀,destroy方法都过时了。强制中断线程不太好,果然还是让他跑完好啊。

下面贴上我的代码。

private boolean iscontinue=true;//是否结束循环
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();            }        }    }});

@Overrideprotected void onDestroy() {    iscontinue=false;    super.onDestroy();}


0 0
原创粉丝点击