Activity销毁时记得关闭线程

作者: smart_dev | 来源:发表于2016-04-25 00:51 被阅读6337次
  • Thread中的stop方法终止一个线程已经不推荐使用,这是由于它带来了操作不安全将给应用程序带来一些不可预测的状态。
  • 线程在执行完run后会自动进入destroy状态

Android的小伙伴都晓得在Activity中UI线程与子线程的运用,那来看看activity销毁时Thread的状态?

这里为了测试,举了个耗时的例子,然后会有一个按钮点击跳转到另外一个activity,并且finish,那么当前的activity就会回调onDestroy()方法

 private boolean stopThread = false;
private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        Log.d("Thread", "handleMessage: " + msg.what);

    }
};
.....
 @Override
protected void onStop() {
    super.onStop();
    Log.d("Thread", "Activity --onStop中线程是否活着:" + myThread.isAlive());

}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("Thread", "Activity --onDestroy中线程是否活着:" + myThread.isAlive());

}
....
 class MyRunable implements Runnable {
        @Override
        public void run() {
            while (!stopThread) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Message message = mHandler.obtainMessage();
                message.what = 12;
                mHandler.sendMessage(message);
            }
        }
    }
线程未自动关闭

上面的这个log是我没有控制关闭线程时,可以看到在onDestroy()线程还是alive状态。
而一般情况下那些引用会随着onDestroy销毁也跟着销毁,这个时候我们就需要来手动关闭线程。
于是可以采用标志位的方式来关闭线程

 @Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("Thread", "Activity --onDestroy中线程是否活着:" + myThread.isAlive());
    stopThread = true;//这样在线程执行run方法就会退出那个循环了
}

相关文章

网友评论

    本文标题:Activity销毁时记得关闭线程

    本文链接:https://www.haomeiwen.com/subject/rvifrttx.html