我們都知道android更新ui不允許在子執行緒中進行,對此,android提供了一套非同步訊息處理機制
xmlns:android
=""android:layout_width
="match_parent"
android:layout_height
="match_parent"
>
android:layout_width
="match_parent"
android:layout_height
="wrap_content"
android:id
="@+id/change_text"
android:text
="change text"
/>
android:id
="@+id/text"
android:layout_centerinparent
="true"
android:textsize
="20sp"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="hello world!"
/>
relativelayout
>
布局檔案中就乙個按鈕,和乙個textview
public
class
mainactivity
extends
implements
view.onclicklistener
private handler handler =
newhandler()
}};public
void
onclick
(view v)})
.start()
;break
;default
:break;}
}}
宣告乙個handler物件,並重寫父類的handlemessage()方法,在這裡對具體的message進行處理
1.先建立乙個message物件,並將它的what字段值指定為update_text然後呼叫handler的sendmessage()方法,將這條message傳送出去。很快handler就會收到這條message,並在handlemessage()方法中對它進行處理。
android中的非同步訊息處理主要有四個部分組成:message,handler,messagequeue,looper。
顧名思義就是處理者的意思,它主要是用於處理和傳送訊息的。傳送訊息一般是使用handler的sendmessage()方法,而發出的訊息經過一系列的輾轉處理之後,最終會傳遞到handlemessage()方法中。
messagequeue是訊息佇列的意思,它主要用於存放所有通過handler傳送的訊息。這部分訊息會一直存在於訊息佇列中,等待被處理。每個執行緒中只會有乙個messagequeue物件。
looper是每個執行緒中messagequeue物件的管家,呼叫looper的loop()方法後,就會進入到乙個無限迴圈當中,然後每當messagequeue中存在一條訊息,就會將他取出,並傳遞到hander的handlemessage()中去。每個執行緒中也只會有乙個looper物件。
由於asynctask是乙個抽象類,所以如果我們想使用它,就必須要建立乙個子類去繼承它。在繼承asynctask時,我們可以指定三個泛型引數,這三個引數作用如下。
在繼承asynctask時,經常需要重寫以下四個方法。
簡單來說,使用asynctask的訣竅是,在doinbackground(prarms…)中執行具體的耗時任務,在onprogressupdate(progress…) 方法中進行ui操作,在onpostexecute(result)中執行一些任務的收尾工作。
如果想啟動這個任務 只需要編寫new asynctask().execute();
即可。
Android 多執行緒程式設計
在子執行緒中更新主線程引數 asynctask class mythread implements runnable 啟動mythread mythread mythread new mythread new thread mythread start new thread new runnable...
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 ...