Android學習-- 銷毀activity時注意關閉線程


在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                 try
22                 {
23                     Thread.sleep(2000);
24                 }
25                 catch (InterruptedException e)
26                 {
27                     // TODO Auto-generated catch block
28                     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         @Override
57         public void handleMessage(Message msg)
58         {
59         // TODO Auto-generated method stub
60             Log.e(TAG, Thread.currentThread().getName() + " " +msg.obj);  
61             setTitle("" +msg.obj);  
62         }
63     }
64     
65 }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM