AsynTask原始碼分析

2021-07-30 22:49:07 字數 2201 閱讀 9206

這裡寫**片asynctask是什麼?

asynctask是android為我們提供的方便編寫非同步任務的工具類

asynctask四個方法

1、onpreexecute() 主要做一些初始化的工作

2、doinbackground(params…) 耗時操作放在這裡

3、onprogressupdate(progress…) 用於顯示任務執行的進度。

4、onpostexecute(result) 更新ui

我們知道要使用asyntask首先要new乙個他的例項

public

asynctask() catch (throwable tr) finally

return result;}};

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

}};

這段**中其實只初始化了兩個物件mworker ,mfuture

private

static

abstract

class

workerrunnable

implements

callable

public

inte***ce

callable

其實只是實現了callable介面

mfuture呢?也只是初始化了callable 和state

public

futuretask(callablecallable)

接著在看execute();

@mainthread

public final asynctaskexecute(params... params)

@mainthread

public final asynctaskexecuteonexecutor(executor exec,

params... params)

}mstatus = status.running;

onpreexecute();

mworker.mparams = params;

exec.execute(mfuture);

return

this;

}

大家可以看到onpreexecute(); 這個時候還是在主線程中所以onpreexecute();可以更改ui,同時他也是第乙個執行的方法

mworker.mparams = params;這句**把引數賦值給了mparams

mworker = new workerrunnable()  catch (throwable tr)  finally 

return result;

}

可以看到 result = doinbackground(mparams); 這質量執行了doinbackground()方法,

在執行postresult(result);

private result postresult(result result)

這裡就可以看到 message.sendtotarget();這句話就是通過handler傳送了乙個訊息

public void sendtotarget()

在看handler

private static class internalhandler extends handler

@suppresswarnings()

@override

public void handlemessage(message msg)

}}

private void finish(result result) else

mstatus = status.finished;

}通過what判斷進入result.mtask.onprogressupdate(result.mdata);

還是onpostexecute(result);方法

總結:

asyntask其實只是封裝了handler訊息機制

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...