销毁activity时注意关闭线程

来源:互联网 发布:淘宝文艺男装店铺 编辑:程序博客网 时间:2024/06/06 15:36

在Activity开启的子线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭子线程或者通过boolean的方式让子线程结束运行。开启的子线程有for循环的要更加注意。

复制代码
 1 package com.lsw;  2  3 import android.app.Activity;   4 import android.os.Bundle;   5 import android.os.Handler;   6 import android.os.Message; 7 import android.util.Log;   8 public class ThreadDemoActivity extends Activity {   9     private static final String TAG = "ThreadDemo";  10     private int count = 0;  11     private Handler mHandler =  new MyHandler();  12     boolean stopThread=false;13       14     private Runnable mRunnable = new Runnable() {15           16         public void run() {17             18             while (!stopThread)19             {20                 count++;  21                 try22                 {23                     Thread.sleep(2000);24                 }25                 catch (InterruptedException e)26                 {27                     // TODO Auto-generated catch block28                     e.printStackTrace();29                 }30                 31                 //虽然Message的构造函数是public的,但是最好是使用Message.obtain( )或Handler.obtainMessage( )函数来获取Message对象,因为Message的实现中包含了回收再利用的机制,可以提供效率。32                 Message message=mHandler.obtainMessage();33                 message.what=0;34                 message.obj=count;35                 mHandler.sendMessage(message);36             }37         }  38     };  39     40     @Override  41     public void onCreate(Bundle savedInstanceState) {  42         super.onCreate(savedInstanceState);  43         setContentView(R.layout.main);   44         //开启子线程45         new Thread(mRunnable).start();46     }  47      48     protected void onDestroy() {49         System.out.println("-----------onDestroy------");50         stopThread=true;51         super.onDestroy();52     };   53     54     class MyHandler extends Handler{55         56         @Override57         public void handleMessage(Message msg)58         {59         // TODO Auto-generated method stub60             Log.e(TAG, Thread.currentThread().getName() + " " +msg.obj);  61             setTitle("" +msg.obj);  62         }63     }64     65 }  
复制代码
0 0