首页投稿(暂停使用,暂停投稿)程序员Android开发

Activity销毁时记得关闭线程

2016-04-25  本文已影响6337人  smart_dev

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方法就会退出那个循环了
}
上一篇 下一篇

猜你喜欢

热点阅读