asynctask的基原理是建立乙個執行緒池,通過執行緒池執行乙個runnable物件(futuretask),然後通過handler通知ui執行緒。
1、執行緒池的建立。建立執行緒池,並返回乙個執行器物件(executor)
private static final int core_pool_size = 5;
private static final int maximum_pool_size = 128;
private static final int keep_alive = 10;
private static final blockingqueuesworkqueue =
new linkedblockingqueue(10);
private static final threadfactory sthreadfactory = new threadfactory()
};private static final threadpoolexecutor ***ecutor = new threadpoolexecutor(core_pool_size,
maximum_pool_size, keep_alive, timeunit.seconds, sworkqueue, sthreadfactory);
2、將被執行的runnable物件(futuretask)的建立。在構造方法中建立futuretask。
public asynctask()
};mfuture = new futuretask(mworker) catch (interruptedexception e) catch (executionexception e) catch (cancellationexception e) catch (throwable t)
message = shandler.obtainmessage(message_post_result,
new asynctaskresult(asynctask.this, result));
message.sendtotarget();}};
}
其中workrunnable是乙個callable物件:
private static abstract class workerrunnableimplements callable
3、執行,execute方法。
public final asynctaskexecute(params... params)
}mstatus = status.running;
onpreexecute();
mworker.mparams = params;
***ecutor.execute(mfuture);
return this;
}
4、使用handler通知ui執行緒,在上面的第二步中最後兩行**。
AsyncTask實現原理
asynctask是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度 可以通過介面實現ui進度更新 最後反饋執行的結果給ui主線程 使用的優點 簡單,快捷,過程可控 ui的更新只能在主線程中完成。asynctask定義了三...
AsyncTask內部原理
asynctask 是乙個封裝了 threadpoolexecutor 和 handler 機制的抽象類,其作用是方便開發者進行多個非同步任務時無需手動在每個執行緒中都採用 handler 機制來通知 ui 執行緒進行操作,從而簡化了多個非同步任務與 ui 執行緒的通訊的情況.我們先留下幾個問題,在...
git內部原理淺見
git物件儲存 git引用 包檔案git gc git是版本管理工具 git是內容定址檔案系統,其核心部分是乙個簡單的鍵值對資料庫 key value index 通過sha 1雜湊值來查詢對應的原資料 git儲存的是快照 每次commit都會儲存整個專案的檔案資料,如果檔案沒有修改則儲存指向原檔案...