怎樣停止AsyncTask和Thread

2021-08-25 13:39:11 字數 2550 閱讀 8829

從外部呼叫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異常,但是如果捕獲該異常的**後面還有其他**,則這些**還會繼續執行。測試**如下:

package com.task;

import android.os.asynctask;

import android.os.bundle;

import android.util.log;

import android.view.view;

import android.view.view.onclicklistener;

import android.widget.button;

public class asynctasktest extends activity

});button endbutton=(button) this.findviewbyid(r.id.stoptask);

endbutton.setonclicklistener(new onclicklistener()

});button startsleepbutton=(button) this.findviewbyid(r.id.startthread_sleep);

final threadfortestsleep threadfortestsleep=new threadfortestsleep();

startsleepbutton.setonclicklistener(new onclicklistener()

});button endsleepbutton=(button) this.findviewbyid(r.id.stopthread_sleep);

endsleepbutton.setonclicklistener(new onclicklistener()

});button startwaitbutton=(button) this.findviewbyid(r.id.startthread_wait);

final threadfortestwait threadfortestwait=new threadfortestwait();

startwaitbutton.setonclicklistener(new onclicklistener()

});button endwaitbutton=(button) this.findviewbyid(r.id.stopthread_wait);

endwaitbutton.setonclicklistener(new onclicklistener()

});}

/*** asynctask

* @author alex**/

private class testasynctask extends asynctask

@override

protected double doinbackground(string... params)

log.i("testasynctask", "doinbackground is start");

for(int i=0;i<10000000;i++)

log.i("testasynctask", "sleep 1 is end");

try catch (interruptedexception e)

log.i("testasynctask", "sleep 2 is end and continue execute");

return a;

} protected void onpostexecute(double result)

}/**

* test sleep

* @author administrator**/

private class threadfortestsleep extends thread catch (interruptedexception e)

double a;

for(int i=0;i<10000000;i++)

log.i("threadfortestwait", "sleep end");}}

/*** test wait

* @author administrator**/

private class threadfortestwait extends thread

} catch (interruptedexception e)

log.i("threadfortestwait", "wait end");}}

}

AsyncTask和Handler非同步實現比較

一 asynctask asynctask是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度 可以通過介面實現ui進度更新 最後反饋執行的結果給ui主線程。優點 簡單 快捷 過程可控。缺點 在使用多個非同步操作和並需要進行...

怎樣用cmd啟動停止服務

最近心血來潮,不喜歡用圖形介面來啟動服務,喜歡用cmd方式來解決,網上找來一篇文章,自己的想法立即實現,網路真是好啊!在cmd下可有兩種方法開啟,net和sc,net用於開啟沒有被禁用的服務,語法是 net start 服務名 net stop 服務名 用sc可開啟被禁用的服務,語法是 sc con...

怎樣用cmd啟動停止服務

最近心血來潮,不喜歡用圖形介面來啟動服務,喜歡用cmd方式來解決,網上找來一篇文章,自己的想法立即實現,網路真是好啊!在cmd下可有兩種方法開啟,net和sc,net用於開啟沒有被禁用的服務,語法是 net start 服務名 net stop 服務名 用sc可開啟被禁用的服務,語法是 sc con...