Android 開子執行緒工作並用監聽器傳回結果到主執行緒--子執行緒與主執行緒通訊
阿新 • • 發佈:2019-02-08
最近研究別人的程式碼,看到其開多執行緒進行工作,並且將結果通過監聽器的方式返回給UI執行緒,程式碼很管用,也容易理解,所以就先記下來
寫一個介面做為監聽器(WorkListener),裡面可以有多個方法,用於對應子執行緒工作不同的事件,如onStart(),onResult(),onStop(),等待
寫一個類(Work),在該類中寫一個工作執行緒繼承自Thread(WorkThread),在該WorkThread中寫入用於工作執行緒的程式碼。
– 在Work類中新增一個HashSet()
private final Collection<WorkListener> listeners = new HashSet();
– 在Work類中新增addWorkListener(WorkListener)方法
public void addWorkListener(WorkListener listener) {
Collection var2 = this.listeners;
synchronized(this.listeners) {
this.listeners.add(listener);
}
}
– 在Work類中寫一個抽象類繼承自Runnable用在事件處理
private abstract class WorkEvent implements
– 在Work類中根據需要寫幾個類繼承自WorkEvent來實現各個事件,如ResultEvent
private class ResultEvent extends Work.WorkEvent { private final Object result; ResultEvent(Object result) { super(); this.result= result; } protected void execute(WorkListener listener) { listener.onResult(this.result); } }
– 在Work類中,建立一個Handler,用於將工作執行緒的資料傳送到主執行緒
private final Handler mainHandler = new Handler(Looper.getMainLooper());
– 自此,監聽器就寫好了,接下來就是在工作執行緒(WorkThread)中利用監聽器去傳遞各個事件(onResult,onStop等)了
WorkThread extends Thread {
public void run() {
...
String result="這是結果";
Work.this.mainHandler.post(Work.this.new ResultEvent(result));
...
}
}