Android多執行緒篇(下) 安卓基礎知識整理

2021-08-04 02:37:13 字數 1675 閱讀 2275

在上篇我總結了關於多執行緒使用的一些基本知識,看完應該可以對非同步訊息處理有一定的了解並且可以簡單地使用了。不過android還提供了另外一些好用的工具——asynctask。儘管對非同步訊息處理不怎麼熟悉,也可以十分簡單地通過使用asynctask來從子執行緒切換到主線程。當然了asynctask背後的原理實際上也是非同步訊息處理機制的,只是android幫我們做了很好的封裝而已。

為了更好的使用asynctask,我們先來了解一下它。asynctask是乙個抽象類,我們要使用它需要新建自己的類來繼承他並且重寫它的一些方法。在繼承的時候我們可以指定3個泛型引數,這三個引數用途如下:

然後我們就可以這樣來定義乙個自己的類

class

mytask

extends

asynctask

這裡我定義了第乙個是void,意思是不需要傳入引數,如果需要也可以更改為其他,第二個為integer,表示用整型數來作為進度的單位,而result則指定為boolean,表示返回結果為布林值(true/false)

然後我們就需要重寫一下它的一些方法了,這裡我列舉一下4個經常需要重寫的四個方法:

onpreexecute()

這個方法會再後台任務開始之前呼叫,用於進行一些介面上的初始化操作,比如顯示乙個進度條對話方塊表示後台任務正在進行。

doinbackground(params…)

這個方法看名字就知道了吧,我們的耗時操作應該放在這裡面來處理。不過需要注意的是這裡不可以進行ui操作,若需要,比如反饋當前任務的進度,可以借助下面的onprogressupdate(progress…)來完成。

onprogressupdate(progress…)

當在後台任務中呼叫publishprogress(progress…)之後,onprogressupdate(progress…)方法就會很快地被呼叫,這個方法中攜帶的引數就是後台任務中傳遞過來的,在這裡可以對ui進行操作。7

onpostexecute(result…)

當後台任務執行完並return返回時,這個方法就很快被呼叫了。返回的資料會作為引數傳遞到此方法中,可以在這裡進行ui操作,比如關掉進度條對話方塊或者提醒任務完成了。

class

downloadtask

extends

asynctask

@override

protected boolean doinbackground(void... params)

}}catch (exception e)

return

true;

}@override

protected

void onprogressupdate(integer... values)

@override

protected

void onpostexecute(boolean aboolean) else

}}

要啟動這個任務,只需一行:

new downloadtask().execute();
以上就是asynctask的基本用法了。簡直比handler方便多了有木有。

好了就寫這麼多吧。

注:本文內容均是《第二行**》(第二版)知識。

安卓 多執行緒

方法1 建立單獨的執行緒 new thread new runnable start 方法2 利用執行緒池 private executorservice executorservice executors.newfixedthreadpool 4 上面是建立乙個固定大小的執行緒池,這裡面的執行緒不...

安卓 多執行緒

第一種實現子執行緒的方法 繼承thread類 private class mythread extends thread new mythread start 第二種實現子執行緒的方式 實現runnable 任務 介面 private class myrunnable implements runn...

安卓多執行緒複習

程序可以全域性設定,谷歌api原話如下 當記憶體不足,而其他更急於為使用者提供服務的程序又需要記憶體時,android 可能會決定在某一時刻關閉某個程序。正因如此,系統會銷毀在被終止程序中執行的應用元件。當這些元件需再次執行時,系統將為其重啟程序。決定終止哪個程序時,android 系統會權衡其對使...