Android學(xué)習(xí)筆記

          我的Android之路
          posts - 13, comments - 3, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          如何中斷Android線程

          Posted on 2011-03-09 12:53 andteamroid 閱讀(5378) 評論(0)  編輯  收藏

              當(dāng)你在后臺使用Thread或者AsyncTask來處理一些耗時的操作時,可能想要對這些線程加以控制,其中包括中斷線程。

              很多情況下,當(dāng)用戶啟動程序的時候,一個后臺運(yùn)行的線程會同時啟動去加載內(nèi)容。但是,當(dāng)用戶離開程序時,線程應(yīng)該被打斷,因為現(xiàn)在用戶已經(jīng)不再關(guān)注程序了,同時也不再關(guān)注線程處理的結(jié)果,而線程是要占用系統(tǒng)的資源的,如果不及時中斷線程,會導(dǎo)致系統(tǒng)資源的浪費(fèi)。

              可是怎么去中斷一個線程呢?從文檔中可以看到Thread類有stop()方法,這個方法提供一個“簡單”的方法去中斷線程。不過這種野蠻的中斷方式會導(dǎo)致一些問題,而且現(xiàn)在這個方法已經(jīng)不推薦使用了。

              除此之外,你可以使用Thread.interrupt()或者AsyncTask.cancel()方法,但是這不會馬上中斷線程,因此,只能在自己的線程中實現(xiàn)中斷并退出。

              在許多情況下,后臺運(yùn)行的線程都有一個主循環(huán),因此你可以在循環(huán)中判斷線程是否被中斷,若被中斷,則退出循環(huán),從而結(jié)束進(jìn)程。例如一個線程下載線程,可以通過isInterrupted()方法判斷當(dāng)前線程是否被中斷。

          thread = new Thread() {
            
          public void run() {
              
              
          while(!isInterrupted() && hasMoreDataToDownload()){
                downloadAndWriteSomeMore();
              }
              
          if(isInterrupted()){
                deleteThePartiallyDownloadedFile();
              }
          else{
                callBack();
              }
            }
          }
          thread.start();
          thread.interrupt();

           

              如果線程被中斷,則調(diào)用deleteThePartiallyDownloadedFile()函數(shù),刪除沒有完成下載的文件。當(dāng)線程沒有被中斷,則調(diào)用callBack()函數(shù),可以使用handler發(fā)送下載完成的信息。

              如果你的線程中沒有這樣一個主循環(huán),例如只是執(zhí)行一個很耗時的SQL查詢操作,可以在查詢操作之后調(diào)用 isInterrupted()來判斷是否需要結(jié)束線程。

              文章翻譯自:http://www.helloandroid.com/tutorials/interruptingcancelling-threads


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 满城县| 靖边县| 鱼台县| 富川| 合阳县| 汉沽区| 江陵县| 南和县| 庆云县| 察隅县| 宝鸡市| 西和县| 曲松县| 平利县| 淳化县| 察隅县| 苍溪县| 西华县| 浙江省| 松桃| 宣威市| 东明县| 永嘉县| 阳曲县| 治多县| 仪陇县| 武义县| 柳河县| 榆林市| 黄冈市| 塘沽区| 文登市| 泾源县| 安溪县| 南丹县| 天峻县| 延庆县| 沧州市| 深州市| 清水河县| 锦屏县|