Android開發筆記 AsyncTask學習筆記

2021-08-18 09:53:43 字數 2008 閱讀 5721

asysnctask 內部是執行緒池 + handler的實現方式實現非同步任務。

asynctask有四個核心方法:

onpreexecute()主線程中執行,執行任務前的一些準備工作可以在此操作

doinbackgroud()執行緒池中執行

onprogressupdate()主線程中執行,更新進度

onpostexecute()主線程中執行,拿到結果,重新整理ui等操作

asynctask具體實現

從入口分析,在初始化asynctask的時候,同時內部初始化了2個類

public

asynctask() catch (throwable tr) finally

return result;}};

mfuture = new futuretask(mworker) catch (interruptedexception e) catch (executionexception e) catch (cancellationexception e) }};

}

乙個是mworker,他是負責執行工作執行緒具體內容的,在子執行緒中被執行,他負責了doinbackground拿到結果,並呼叫postresult()方法,把結果post出去。還有乙個mfuture,他是乙個實現了runnable, future的併發執行類,即執行任務的子執行緒,

當我們執行asynctask的時候會呼叫execute()方法,execute()又調了executeonexecutor()方法

public

final asynctaskexecuteonexecutor(executor exec,

params... params)

}mstatus = status.running;

onpreexecute();

mworker.mparams = params;

exec.execute(mfuture);

return

this;

}

可以看出最終開始執行是執行緒池的execute方法,asynctask裡有2個執行緒池,serialexecutorthreadpoolexecutor,serialexecutor,而threadpoolexecutor負責執行任務,檢視serialexecutor原始碼,是可以看出他在執行完乙個任務後呼叫了schedulenext()方法,而serialexecutor是靜態的變數,不論多少個asynctask都會共享這個執行緒池,這就導致了使用asynctask執行多個任務時,會序列,而不是並行的。

private

static

class

serialexecutor

implements

executor finally

}});

if (mactive == null)

}protected

synchronized

void

schedulenext()

}}

asynctask.executeonexecutor(asynctask.thread_pool_executor,"");
private

static

class

internalhandler

extends

handler

@suppresswarnings()

@override

public

void

handlemessage(message msg)

}}

Android 開發筆記

版本控制的注意事項 以下資料夾不要加入版本控制 bin bin是編譯的二進位制檔案的存放路徑 gen gen是android需要的資源檔案的原始檔存放的目錄 使用svn的時候要注意專案編譯的問題 在編譯的時候程式會把src資料夾裡面的檔案拷貝到bin裡面,但是svn是每個資料夾裡面都包含乙個隱藏的....

Android開發筆記

1.unable to resolve target android 4 fishjoy final未知android target problem 修改default properties 或者重啟 2.別人的開發筆記 3.真機除錯的時候,一定要下google的usb driver.或者省時省力,...

android開發筆記

1 androidmanifest.xml 解釋 3 meta data標籤使用 4 android.intent.action.main作用 6 頂部滑動導航實現 操作步驟 1 設定好布局檔案,在布局檔案中加入viewpager 2 新建號fragment的布局 3 將fm和viewlist傳入a...