在子執行緒中更新主線程引數
asynctask
class mythread implements runnable
}
啟動mythread
mythread mythread = new mythread();
new thread(mythread).start();
new thread(
new runnable() }
).start();
子執行緒不能直接修改主線程中的變數,否者會出現異常。
首先定義乙個整形常量update_data。
public static final int update_data = 1;
新增乙個handler物件,並重寫父類的handlemessage()方法。
private handler handler = new handler()
}}
在單擊事件中開啟子執行緒,在「具體的邏輯」執行完成後,建立乙個message物件,將message物件的what欄位的值指定為update_data,將message物件傳送出去。
很快,handler就會收到這條message,並在handlemessage()方法中對它進行處理。
new thread(
new runnable() }
).start();
對於在子執行緒中使用主線程中的變數,android提供了乙個更方便的工具:asynctask。
即使對非同步訊息處理機制完全不了解,也可以十分簡單的從子執行緒切換到主線程。
asynctask是乙個抽象類,在繼承時我們可以為asynctask類指定3個泛型引數。
params:在執行asynctask時,需要傳入的引數,可用於在後台任務中使用
progress:後台任務執行時,如果需要再介面上顯示當前進度,則使用這裡指定的泛型作為進度單位。
result:當任務執行完畢後,如果需要對結果進行返回,則使用這裡指定的泛型作為返回值型別。
//void:表示在執行asynctask的時候不需要傳入引數給後台任務
//integer:表示使用整型資料來作為進度顯示單位
//boolean:表示使用布林型資料來反饋執行結果
class downloadtask extends asynctask
重寫asynctask中的幾個方法,完成對任務的定製
doinbackground():中執行具體的耗時任務
onprogressupdate():中進行主線程變數操作
onpostexecute():中做執行一些任務的收尾工作
class downloadtask extends asynctask
@override
protect boolean doinbackground(void ... params)
@override
protect void onprogressupdate(integer ... values)
@override
protect void onpostexecute(boolean result)
}
如果想要啟動這個任務,只需要編寫以下**即可:
new downloadtask().execute();
Android多執行緒程式設計
我們都知道android更新ui不允許在子執行緒中進行,對此,android提供了一套非同步訊息處理機制 xmlns android android layout width match parent android layout height match parent android layout...
Android多執行緒程式設計及執行緒通訊
android多執行緒程式設計及執行緒通訊。android多執行緒程式設計是android應用中最普遍的程式設計方法之一,初學者只要掌握如下簡單方法,即可實現執行緒及執行緒與主介面之間通訊。1 建立執行緒 public void createspeakthread speakthread.start...
Android 多執行緒
1 簡介 2 android 平台下的多執行緒 package com.powerise.thread import android.os.bundle import android.view.view import android.view.view.onclicklistener import ...