Android中AsyncTask類解析

2021-08-26 11:37:29 字數 1698 閱讀 6842

asynctask暫且翻譯為非同步任務

asynctask使ui執行緒的使用變得恰當和簡單。這個類允許在後台執行操作並且在ui執行緒呈現處理的結果,無需操作執行緒。

乙個非同步任務是指在後台執行的執行緒,其執行結果在ui執行緒呈現。

乙個非同步任務由3個泛型和4個步驟定義完成。

用法:乙個asynctask必須要被繼承才能使用。這個子類必須重寫doinbackground(params...)方法,通常還要重寫onpostexecute(result)方法。

下面是乙個子類的列子,來自官方文件:

private class downloadfilestask extends asynctask

return totalsize;

}protected void onprogressupdate(integer... progress)

protected void onpostexecute(long result)

}

一旦被建立,乙個任務可以很簡單地執行:

new downloadfilestask().execute(url1, url2, url3);

這3種型別使用如下

1.params,任務執行時輸入的引數型別

2.progress,後台任務執行的百分比進度

3.result,後台任務執行後的返回結果,比如string

乙個非同步任務執行時,經歷如下4個步驟:

1. onpreexecute() ,當任務被執行後立即被ui執行緒呼叫。這一步通常用來設定這個任務,比如在使用者介面顯示乙個進度條。

2.doinbackground(params...) 在onpreexeecte執行完後立即在後台執行。這一步通常用來執行後台的耗時操作。任務的引數會傳遞到這一步來,其運算結果被返回並傳遞給最後一步。在這一步也可以呼叫publishprogress(progress...)來更新任務進度。這些值會在onprogressupdate(progress...)時被ui執行緒公布出來。

3.onprogressupdate(progress).在publisprogress(progress...)被呼叫後由ui執行緒喚起,其執行時間是不確定的。這個方法用來在使用者介面中顯示後台操作的執行進度。比如,它可以用來動態顯示乙個進度條或者在文字框顯示日誌。

4.onpostexecute(result) 在後台操作執行完後由ui執行緒呼叫。在這一步,後台操作執行的結果會被當做乙個引數傳遞給它,即result。

通過呼叫cancel(boolean),乙個任務可以在任意時刻被取消。呼叫這個方法會導致後面呼叫iscancelled()返回true。呼叫這個方法後,在doinbackground(params...)返回時將不再呼叫onpostexecute(object)而是呼叫oncancelled(object).為了盡快取消乙個任務,你必須周期性地在doinbackgrouond(object)中檢查iscancelled()的返回值。如果可能的話,比如可以在乙個迴圈內這麼幹。

任務的例項必須在ui執行緒建立

execute(params...)必須在ui執行緒呼叫

不要手動呼叫onpreexecute(),onpostexecute(result),doinbackgrouond(params...),onprogressupdate(progress..)

任務只會執行一次,如果嘗試執行第二次則會丟擲乙個異常。

android 中layout weight的作用

layout weight 用於給乙個線性布局中的諸多檢視的重要度賦值。所有的檢視都有乙個layout weight值,預設為零,意思是需要顯示多大的檢視就佔據多大的螢幕空 間。若賦乙個高於零的值,則將父檢視中的可 用空間分割,分割大小具體取決於每乙個檢視layout weight 值以及該值在當前...

Android中LayoutParams的用法

寧願做過了後悔,也不要錯過了後悔。本講內容 layoutparams的用法 一 layoutparams的認識 從官方文件可知layoutparams繼承於android.view.viewgroup.layoutparams.layoutparams相當於乙個layout的資訊包,它封裝了layo...

android中layout weight的理解

例如 xmlns android android layout width fill parent android layout height wrap content android background 00ff00 android weightsum 0 android orientation...