一、簡介 java
asynctask部分,主要使用了模版方法,對asynctask類的封裝,主要是簡化了耗時操做的寫法,本來的耗時操做須要在線程中執行,而後若是在線程中須要更新UI的話,得用Handler提交給UI線程執行。下面是未使用的代碼寫法: 框架
private Handler handler = new Handler(); ...... new Thread() { @Override public void run() { String resultStr = null; try { resultStr = doHttpOperation();//Http耗時操做獲取資源結果 } catch (Exception e) { } //耗時操做完成後更新UI,給TextView設置結果 handler.post(new Runnable(){ @Override public void run(){ textView.setText(resultStr);//更新UI,須要在UI線程中操做 } }; );} }.start();二、 asynctask部分的使用詳解
(1)首先,定義一個類,繼承AbstractTask。以下面的代碼: async
public class GetUserTask extends AbstractTask<String> { public GetUserTask(Context context,boolean isShow) { super(context,isShow); } @Override protected Result<String> doHttpRequest(Object... objects) { String resultStr = doHttpOperation();//Http耗時請求 Result<String> result = null; if(TextUtils.isEmpty(resultStr)){ result = new Result(false,"請求異常"); }else{ result = new Result(false,"",resultStr); } return result; } }(2)而後就能夠在Activity中或者別的地方使用了。以下更新TextView操做:
//true表示請求時會有提示,若是想後臺默默執行不想提醒用戶,能夠設置成false GetUserTask task = new GetUserTask(this,true); //設置成功回調,更新TextView就能夠在這裏操做 task.setAsyncTaskSuccessCallback(new AsyncTaskSuccessCallback<String>() { @Override public void successCallback(Result<String> result) { String resultStr = result.getValue(); textView.setText(resultStr); } } //設置失敗回調,若是不想捕捉能夠忽略不設置 task.AsyncTaskSuccessCallback(new AsyncTaskSuccessCallback<String>() { @Override public void successCallback(Result<String> result) { } } //執行,能夠傳入參數 task.execute(new Object[] { accountId});
三、結尾 ide
上面看上去,好像使用了框架代碼更多了,其實不是,使用框架以後,能夠使耗時操做(例如Http操做)和UI更新操做分離。使代碼更加簡潔可維護。第二,若是使用Thread和Handler來實現,還須要本身實現ProgressDialog,用來提醒用戶,相似於:正在加載中...這樣的對話框,而這一點框架都幫你完成了。固然方便向左,靈活向右,框架能夠知足大部分邏輯操做,若是須要更靈活,例如,在Http加載中,提示用戶加載進度百分比,那麼框架就不能知足了,這時候只能本身用Thread和Handler去實現。不過這方面需求很少,固然框架還在發展,有待支持更靈活,還在等什麼,期待你的加入。 post