Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android高手進階教程(十九)之——Android開發中,使用線程應該注意的問題

Android高手進階教程(十九)之——Android開發中,使用線程應該注意的問題

編輯:Android開發實例

我們都知道Hanlder是線程與Activity通信的橋梁,我們在開發好多應用中會用到線程,有些人處理不當,會導致當程序結束時,線程並沒有被銷毀,而是一直在後台運行著,當我們重新啟動應用時,又會重新啟動一個線程,周而復始,你啟動應用次數越多,開啟的線程數就越多,你的機器就會變得越慢。

為了方便 大家理解,我寫一個簡單的Demo.功能就是每2秒中將應用的Title更換一次。具體步驟如下:

第一步:新建一個Android工程命名為ThreadDemo。

第二步:修改ThreadDemo.java,代碼如下:

 

  1. package com.tutor.thread;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.os.Handler;  
  5. import android.util.Log;  
  6. public class ThreadDemo extends Activity {  
  7.     private static final String TAG = "ThreadDemo";  
  8.     private int count = 0;  
  9.     private Handler mHandler =  new Handler();  
  10.       
  11.     private Runnable mRunnable = new Runnable() {  
  12.           
  13.         public void run() {  
  14.             //為了方便 查看,我們用Log打印出來  
  15.             Log.e(TAG, Thread.currentThread().getName() + " " +count);  
  16.             count++;  
  17.             setTitle("" +count);  
  18.             //每2秒執行一次  
  19.             mHandler.postDelayed(mRunnable, 2000);  
  20.         }  
  21.           
  22.     };  
  23.     @Override 
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);   
  27.         //通過Handler啟動線程  
  28.         mHandler.post(mRunnable);  
  29.     }  
  30.       

第三步:運行上述工程,查看運行效果:

當然上面不是重點,退出應用時,線程還在跑,打開Logcat視窗或者cmd終端查看,如下(剛吃了午餐回來,線程還在跑著):

當我們再次啟動應用時,會重新啟動一個新的線程,如下圖所示:

所以我們在應用退出時,要將線程銷毀,我們只要在Activity中的,onDestory()方法處理一下就OK了,如下代碼所示:

 

  1. @Override 
  2.   protected void onDestroy() {  
  3.     mHandler.removeCallbacks(mRunnable);  
  4.     super.onDestroy();  
  5.   } 

所以ThreadDemo.java的完整代碼如下:

 

  1. package com.tutor.thread;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.os.Handler;  
  5. import android.util.Log;  
  6. public class ThreadDemo extends Activity {  
  7.     private static final String TAG = "ThreadDemo";  
  8.     private int count = 0;  
  9.     private Handler mHandler =  new Handler();  
  10.       
  11.     private Runnable mRunnable = new Runnable() {  
  12.           
  13.         public void run() {  
  14.             //為了方便 查看,我們用Log打印出來  
  15.             Log.e(TAG, Thread.currentThread().getName() + " " +count);  
  16.             count++;  
  17.             setTitle("" +count);  
  18.             //每2秒執行一次  
  19.             mHandler.postDelayed(mRunnable, 2000);  
  20.         }  
  21.           
  22.     };  
  23.     @Override 
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);   
  27.         //通過Handler啟動線程  
  28.         mHandler.post(mRunnable);  
  29.     }  
  30.       
  31.     @Override 
  32.     protected void onDestroy() {  
  33.         //將線程銷毀掉  
  34.         mHandler.removeCallbacks(mRunnable);  
  35.         super.onDestroy();  
  36.     }  

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved