程序開發中經常會有立即停止線程運行的需要,而通過api是沒有辦法實現這個目的的,因此對於這個情況,我們需要采取一些“特殊”的方式來實現:
1,判斷標志位的辦法:
我們要知道在java的線程中,沒有辦法停止一個正在運行中的線程。在Android的AsyncTask中也是一樣的。如果必須要停止一個線程,我們可以采用這個線程中設置一個標志位,然後在線程run方法或AsyncTask的doInBackground方法中的關鍵步驟判斷這個標志位以決定是否繼續執行。然後在需要終止此線程的地方改變這個標志位以達到停止線程的目的。
2,合理的利用Exception
從外部調用AsyncTask的cancel方法並不能停止一個已經啟動的AsyncTask。這個cancel方法的作用與線程的interrupt方法相似,調用了一個線程的interrupt方法之後線程仍然運行,但是如果該線程的run方法裡面調用過sleep的或者wait方法後,處於sleep或wait狀態,則sleep和wait立即結束並且拋出InterruptedException異常。AsyncTask的cancel方法也一樣,如果在這個Task的doInBackground方法中調用了sleep或wait方法,當在UI線程中調用了這個Task實例的cancel方法之後,sleep或wait立即結束並且拋出InterruptedException異常,但是如果捕獲該異常的代碼後面還有其他代碼,則這些代碼還會繼續執行。
3,可以在UI上做手腳
如果用戶在後台線程正獲取內容時做出了取消的行為,我們可以根據用戶的這種行為在UI上立即做出反饋,此時,即使線程完成了數據的Loading,我們也不讓數據顯示出來,算是一種投機取巧的辦法吧。
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11