當前位置:首頁 » 安卓系統 » androidasynctask參數

androidasynctask參數

發布時間: 2022-07-06 13:52:15

⑴ android中的asynctask可不可以並行執行多個

AsyncTask:非同步任務,從字面上來說,就是在我們的UI主線程運行的時候,非同步的完成一些操作。AsyncTask允許我們的執行一個非同步的任務在後台。我們可以將耗時的操作放在非同步任務當中來執行,並隨時將任務執行的結果返回給我們的UI線程來更新我們的UI控制項。通過AsyncTask我們可以輕松的解決多線程之間的通信問題。 怎麼來理解AsyncTask呢?通俗一點來說,AsyncTask就相當於Android給我們提供了一個多線程編程的一個框架,其介於Thread和Handler之間,我們如果要定義一個AsyncTask,就需要定義一個類來繼承AsyncTask這個抽象類,並實現其唯一的一個 doInBackgroud 抽象方法。要掌握AsyncTask,我們就必須要一個概念,總結起來就是: 3個泛型,4個步驟。 3個泛型指的是什麼呢?我們來看看AsyncTask這個抽象類的定義,當我們定義一個類來繼承AsyncTask這個類的時候,我們需要為其指定3個泛型參數: AsyncTask<Params, Progress, Result> Params: 這個泛型指定的是我們傳遞給非同步任務執行時的參數的類型 Progress: 這個泛型指定的是我們的非同步任務在執行的時候將執行的進度返回給UI線程的參數的類型 Result: 這個泛型指定的非同步任務執行完後返回給UI線程的結果的類型 我們在定義一個類繼承AsyncTask類的時候,必須要指定好這三個泛型的類型,如果都不指定的話,則都將其寫成Void,例如: AsyncTask <Void, Void, Void> 4個步驟:當我們執行一個非同步任務的時候,其需要按照下面的4個步驟分別執行 onPreExecute(): 這個方法是在執行非同步任務之前的時候執行,並且是在UI Thread當中執行的,通常我們在這個方法里做一些UI控制項的初始化的操作,例如彈出要給ProgressDialog doInBackground(Params... params): 在onPreExecute()方法執行完之後,會馬上執行這個方法,這個方法就是來處理非同步任務的方法,Android操作系統會在後台的線程池當中開啟一個worker thread來執行我們的這個方法,所以這個方法是在worker thread當中執行的,這個方法執行完之後就可以將我們的執行結果發送給我們的最後一個 onPostExecute 方法,在這個方法里,我們可以從網路當中獲取數據等一些耗時的操作 onProgressUpdate(Progess... values): 這個方法也是在UI Thread當中執行的,我們在非同步任務執行的時候,有時候需要將執行的進度返回給我們的UI界面,例如下載一張網路圖片,我們需要時刻顯示其下載的進度,就可以使用這個方法來更新我們的進度。這個方法在調用之前,我們需要在 doInBackground 方法中調用一個 publishProgress(Progress) 的方法來將我們的進度時時刻刻傳遞給 onProgressUpdate 方法來更新 onPostExecute(Result... result): 當我們的非同步任務執行完之後,就會將結果返回給這個方法,這個方法也是在UI Thread當中調用的,我們可以將返回的結果顯示在UI控制項上 為什麼我們的AsyncTask抽象類只有一個 doInBackground 的抽象方法呢??原因是,我們如果要做一個非同步任務,我們必須要為其開辟一個新的Thread,讓其完成一些操作,而在完成這個非同步任務時,我可能並不需要彈出要給ProgressDialog,我並不需要隨時更新我的ProgressDialog的進度條,我也並不需要將結果更新給我們的UI界面,所以除了 doInBackground 方法之外的三個方法,都不是必須有的,因此我們必須要實現的方法是 doInBackground 方法。

⑵ android中,非同步任務asynctask只能傳遞一種參數么

試試用bundle傳送過去

⑶ android AsyncTask 怎麼返回值給UI線程

新建類extends AsyncTask要提供三泛型參數並且重載需要 三參數ParamsProgressResult台操作返值
看例:
public class ProgressBarAsyncTask extends AsyncTask{
/**
* String參數應AsyncTask第三參數(接收doInBackground返值)
* doInBackground執行結束運行並且運行UI線程 UI空間進行設置
*/
@Override
protected void onPostExecute(String result) {
textView.setText("非同步操作執行結束" + result);
}
}

重載至少

⑷ android中 如果要你來設計AsyncTask,你怎麼設計

AsyncTask是Android為我們提供的方便編寫非同步任務的工具類,但是,在了解AsyncTask的實現原理之後,發現AsyncTask並不能滿足我們所有的需求,使用不當還有可能導致應用FC。所以大家很有必要對AsyncTask工具做一個全面詳細而詳細的學習。
AsyncTask主要有二個部分:一個是與主線各的交互,另一個就是線程的管理調度。雖然可能多個AsyncTask的子類的實例,但是AsyncTask的內部Handler和ThreadPoolExecutor都是進程范圍內共享的,其都是static的,也即屬於類的,類的屬性的作用范圍是CLASSPATH,因為一個進程一個VM,所以是AsyncTask控制著進程范圍內所有的子類實例。
與主線程交互
與主線程交互是通過Handler來進行的,因為本文主要探討AsyncTask在任務調度方面的,所以對於這部分不做細致介紹,感興趣的朋友可以去看AsyncTask的源碼
線程任務的調度
內部會創建一個進程作用域的線程池來管理要運行的任務,也就就是說當你調用了AsyncTask#execute()後,AsyncTask會把任務交給線程池,由線程池來管理創建Thread和運行Therad。對於內部的線程池不同版本的Android的實現方式是不一樣的:
Android2.3以前的版本,也即SDK/API 10和以前的版本
內部的線程池限制是5個,也就是說同時只能有5個線程運行,超過的線程只能等待,等待前面的線程某個執行完了才被調度和運行。換句話說,如果一個進程中的AsyncTask實例個數超過5個,那麼假如前5個都運行很長時間的話,那麼第6個只能等待機會了。這是AsyncTask的一個限制,而且對於2.3以前的版本無法解決。
如果你的應用需要大量的後台線程去執行任務,那麼你只能放棄使用AsyncTask,自己創建線程池來管理Thread,或者乾脆不用線程池直接使用Thread也無妨。不得不說,雖然AsyncTask較Thread使用起來比較方便,但是它最多隻能同時運行5個線程,這也大大局限了它的實力,你必須要小心的設計你的應用,錯開使用AsyncTask的時間,盡力做到分時,或者保證數量不會大於5個,否則就可能遇到上面提到的問題。要不然就只能使用JavaSE中的API了。

⑸ 在Android AsyncTask的onPostExecute更新ListView的適配器的話會導致fragment切換時變得很卡

首先來看一下AsyncTask的基本用法,由於AsyncTask是一個抽象類,所以如果我們想使用它,就必須要創建一個子類去繼承它。在繼承時我們可以為AsyncTask類指定三個泛型參數,這三個參數的用途如下:http://www.ijiami.cn/newsInfo?id=291&v=3

1. Params

在執行AsyncTask時需要傳入的參數,可用於在後台任務中使用。
2. Progress

後台任何執行時,如果需要在界面上顯示當前的進度,則使用這里指定的泛型作為進度單位。
3. Result

當任務執行完畢後,如果需要對結果進行返回,則使用這里指定的泛型作為返回值類型。

⑹ android asynctask的do in background方法是怎麼通知ui線程刷新進度條的

在開發Android移動客戶端的時候往往要使用多線程來進行操作,我們通常會將耗時的操作放在單獨的線程執行,避免其佔用主線程而給用戶帶來不好的用戶體驗。但是在子線程中無法去操作主線程(UI 線程),在子線程中操作UI線程會出現錯誤。因此android提供了一個類Handler來在子線程中來更新UI線程,用發消息的機制更新UI界面,呈現給用戶。這樣就解決了子線程更新UI的問題。但是費時的任務操作總會啟動一些匿名的子線程,太多的子線程給系統帶來巨大的負擔,隨之帶來一些性能問題。因此android提供了一個工具類AsyncTask,顧名思義非同步執行任務。這個AsyncTask生來就是處理一些後台的比較耗時的任務,給用戶帶來良好用戶體驗的,從編程的語法上顯得優雅了許多,不再需要子線程和Handler就可以完成非同步操作並且刷新用戶界面。
先大概認識下Android.os.AsyncTask類:
* android的類AsyncTask對線程間通訊進行了包裝,提供了簡易的編程方式來使後台線程和UI線程進行通訊:後台線程執行非同步任務,並把操作結果通知UI線程。
* AsyncTask是抽象類.AsyncTask定義了三種泛型類型 Params,Progress和Result。
* Params 啟動任務執行的輸入參數,比如HTTP請求的URL。
* Progress 後台任務執行的百分比。
* Result 後台執行任務最終返回的結果,比如String,Integer等。
* AsyncTask的執行分為四個步驟,每一步都對應一個回調方法,開發者需要實現這些方法。
* 1) 繼承AsyncTask
* 2) 實現AsyncTask中定義的下面一個或幾個方法
* onPreExecute(), 該方法將在執行實際的後台操作前被UI 線程調用。可以在該方法中做一些准備工作,如在界面上顯示一個進度條,或者一些控制項的實例化,這個方法可以不用實現。
* doInBackground(Params...), 將在onPreExecute 方法執行後馬上執行,該方法運行在後台線程中。這里將主要負責執行那些很耗時的後台處理工作。可以調用 publishProgress方法來更新實時的任務進度。該方法是抽象方法,子類必須實現。
* onProgressUpdate(Progress...),在publishProgress方法被調用後,UI 線程將調用這個方法從而在界面上展示任務的進展情況,例如通過一個進度條進行展示。
* onPostExecute(Result), 在doInBackground 執行完成後,onPostExecute 方法將被UI 線程調用,後台的計算結果將通過該方法傳遞到UI 線程,並且在界面上展示給用戶.
* onCancelled(),在用戶取消線程操作的時候調用。在主線程中調用onCancelled()的時候調用。
為了正確的使用AsyncTask類,以下是幾條必須遵守的准則:
1) Task的實例必須在UI 線程中創建
2) execute方法必須在UI 線程中調用
3) 不要手動的調用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個方法,需要在UI線程中實例化這個task來調用。
4) 該task只能被執行一次,否則多次調用時將會出現異常
doInBackground方法和onPostExecute的參數必須對應,這兩個參數在AsyncTask聲明的泛型參數列表中指定,第一個為doInBackground接受的參數,第二個為顯示進度的參數,第第三個為doInBackground返回和onPostExecute傳入的參數。

⑺ android怎麼使用asynctask返回布爾值

android怎麼使用asynctask進行比較返回布爾值
public interface MyInterface {
public void myMethod(boolean result);
}
public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> {
private MyInterface mListener;
public AsyncConnectTask(Context context, String address, String user,
String pass, int port, MyInterface mListener) {
mContext = context;
_address = address;
_user = user;
_pass = pass;
_port = port;
this.mListener = mListener;

⑻ android AsyncTask 中的幾個方法比如doInBackground 中後面幾個參數中間的幾個點是什麼意思

String... params表示的是可變參數列表,也就是說,這樣的方法能夠接受的參數個數是可變的,但不論多少,必須都是String類型的。比如
doInBackground("param1","param2","param3") ,或是doInBackground() 。實際上,在處理可變參數列表的時候,Java是轉化為數組來處理的,比如前面的例子,doInBackground傳進來三個參數,此時params實際上是一個String[3],可以通過params[0]來引用傳進來的實參"param1"。當doInBackground()沒有提供實參時params就為null。另外,對於可變參數列表的方法,我們可以直接傳遞一個數組代替,比如doInBackground(new String[]{"param1", "param2", "param3"}),效果和doInBackground("param1","param2","param3")是一樣的。

⑼ 如何獲取AsyncTask 非同步處理的返回值

android AsyncTask<String,void,String>
第一個參數就是你要訪問的地址 第二個就是進度 第三個就是返回值
AsyncTask執行完doInBackground會自己調用一下方法
@Override
protected void onPostExecute(string orderBeans) {
super.onPostExecute(orderBeans);
在這個方法中 orderBeans就是返回的值 可以在這個方法中賦值個控制項

⑽ android AsyncTask怎麼返回String給activity

為自己寫的AsyncTask類寫一個屬性Handler handler,
在Activity裡面構造AsyncTask的時候將handler對象傳過去,這樣當AsyncTask執行完之後,就可以用handler發送消息將結果傳到Activity里的handler了
class MyAsyncTask extends AsyncTask< >{

private Handler handler;

public MyAsyncTask(Handler handler){
this.handler = handler;

}

// 其餘部分省略....

}

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:628
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:357
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:75
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:300
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:788
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:338
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:204
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:801
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:357
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:583