androidthread結束
Ⅰ android如何終止一個正在運行的子線程
線程像這樣:
Thread{
boolean flag = fase;
run(){
while(!flag){
}
}
}
Thread t = new Thread();
t.start();
-----------------------------------------------------
要終止循環,只需要這樣
t.flag=true;
================================================
還有一種方式 線程像這樣:
Thread{
run(){
while(true){
Thread.sleep(xxxx);
}
}
}
Thread t = new Thread();
t.start();
--------------------------------------------
要終止循環,只需要這樣
t.interrupte();
但是這里要注意調用的時機,要在子線程執行了run方法裡面的sleep(xxxx)後xxxx時間之內調用。也就是子線程會睡一會,醒一會,睡一會,醒一會,要在子線程睡著的時候調用。
Ⅱ android開發怎麼用代碼結束進程
用一個公共boolean值做標記,需要結束的時候更改一下標記,如果線程處於阻塞,就調用interrupt()實現即時結束,如:
java">//定義一個公共boolean標記
booleanstop=false;
//線程的run方法
publicvoidrun(){
while(!stop){
try{
System.out.println("running");
Thread.sleep(5000);
}catch(InterruptedExceptione){
e.printStackTrace();
System.out.println("stop");
}
}
}
//如果要結束,在要結束線程的地方把stop的值改為true,
stop=true;
//因為是線程在阻塞,所以還要調用interrupt()拋出異常結束阻塞
myThread.interrupt();
Ⅲ android framework thread怎麼停止
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
...
}
}).start();
1234567891012345678910
當然,你也可以在Android中創建一個消息循環的HandlerThread
HandlerThread mThread = new HandlerThread("test");
mThread.start();
Handler mHandler = new Handler(mThread.getLooper()){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
};
Ⅳ Android 中如何停止一個線程
有三種方法可以結束線程:
1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止
2. 使用interrupt()方法中斷線程
3. 使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)
前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程;第3種方法相當於電腦斷電關機一樣,是不安全的方法。
Ⅳ Android如何停止線程的方式
一種是調用它裡面的stop()方法,另一種就是你自己設置一個停止線程的標記 (推薦這種)
如果使用Thread.stop方法停止線程,不能保證這個線程是否完整的運行完成一次
run方法;但是如果使用停止的標記位,那麼可以保正在真正停止之前完整的運行完
成一次run方法;第二中方式,但是對於麻煩的動作,解決方式是這一個全局變數,每個復雜的動作都進行判斷一下
Ⅵ Android怎麼結束一個線程
在Java語言中,安全結束線程的方法就是「讓線程的自身流程執行完」。
出現「僵屍線程」的原因:1.線程在死循環中執行。2.線程阻塞。
很明顯,你的ReadHandlerThread線程發生了線程阻塞。
dis.readFully(b),你在這里調用了一個阻塞方法,由於socket的另一端一直沒有發送數據,ReadHandlerThread線程一直阻塞在了這里,等待接收完136位元組的數據。136位元組沒有接收完,readFully方法將一直處於阻塞狀態。
解決方法,設置socket的等待超時值,而不是無限等待。
Ⅶ 如何終止 android線程池中的任務
終止android線程池中的任務的方法
1.實現Callable介面
2.調用pool.submit()方法,返回futrue對象
3.用future對象來獲取線程的狀態。
voidtest(){
ExecutorServicepool=Executors.newFixedThreadPool(2);
Callable<String>s=newCallable<String>(){
@Override
publicStringcall()throwsException{
System.out.println("test");
return"true";
}
};
Future<String>f=pool.submit(s);
System.out.println(f.isCancelled());
System.out.println(f.isDone());
f.cancel(true);
}
Ⅷ android 為什麼不建議使用Thread.stop
當調用Thread.stop()方法時,會發生以下兩種事情:
1. 即可拋出ThreadDeath異常,在線程的run()方法裡面,任何一刻都可能拋出ThreadDeath Error,包括在catch或者finally語句中。
2. 釋放該線程的所有鎖。
當線程拋出ThreadDeath異常時,會導致線程的run()方法突然返回來達到停止該線程的目的。這個異常可以在該線程run()任意一個執行點拋出。原則上只要一調用thread.stop()方法,線程會立即停止,並拋出ThreadDeath error,查看了Thread的源代碼後才發現,原先Thread.stop0()方法是同步的,而我們工作線程的run()方法也是同步,那麼這樣會導致主線程和工作線程共同爭用同一個鎖(工作線程對象本身),由於工作線程在啟動後就先獲得了鎖,所以無論如何,當主線程在調用thread.stop()時,它必須要等到工作線程的run()方法執行結束後才能進行。
因此,thread.stop()是不安全的,主要針對於於:釋放改線程所持有的所有的鎖,而鎖的突然釋放會導致被保護的數據的不一致性。
正確停止線程總結起來是以下三點:
1. 使用violate boolean 變數來表示線程是否停止;
2. 停止線程時,需要調用停止線程的interrupt()方法,因為線程有可能在wait()或者sleep(),提高停止線程的及時性;
3. 對於blocking IO的處理,盡量使用interruptibleChannel來代替 blocking IO。
Ⅸ Android 如何監聽一個線程的開始和結束
方法一:輪詢
比如主線程要等子線程在得到變數「val」值的時候開始用「val」的值來進行工作,這個比較簡單。
方法二,回調
回調就是調用別的對象的方法時把「自己」傳進去,然後別的對象在某個時候調用「自己的方法」
publicinterfaceThreadCallback{
voidthreadStartLisener();
voidthreadEndLisener();
}{
;
publicSubRunnable(ThreadCallbackthreadCallback){
this.mThreadCallback=threadCallback;
}
@Override
publicvoidrun(){
mThreadCallback.threadStartLisener();
for(inti=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"dosomething"+i);
}
mThreadCallback.threadEndLisener();
}
}{
=newThreadCallbackTest();
publicstaticvoidmain(String[]args){
System.out.println(Thread.currentThread().getName()+"開始");
newThread(newSubRunnable(mThreadCallbackTest)).start();
}
@Override
publicvoidthreadStartLisener(){
System.out.println(Thread.currentThread().getName()+"線程,知道SubRunnable線程開始執行任務了");
}
@Override
publicvoidthreadEndLisener(){
System.out.println(Thread.currentThread().getName()+"線程,知道SubRunnable線程任務執行結束了");
}
}
Ⅹ android thread 後台線程 怎麼設置隨著主線程的結束而結束
關於線程的結束有以下幾點:
1.不要手動調用stop方法強行終止一個線程,這種方式不安全。
通過幫助文檔,我們可以知道,Android的線程類本身就提供了一些公共方法去結束線程。
final void stop()
This method is deprecated. because stopping a thread in this manner is unsafe and can leave your application and the VM in an unpredictable state
但是,通過說明我們可以看到,這些方法Android本身都是不推薦使用的,通過這種方式結束線程是不安全的。
2.線程里run函數短,執行完後線程會自行銷毀,不用手動去終止。
3.手動停止,通過在run里設置標志先停止運行,再調用Thread.interrupt();注意,在run沒有停止時調用.interrupt()沒有效果。