asynctask部分--耗時操做的封裝

一、簡介 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

相關文章
相關標籤/搜索