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});
三、结尾

上面看上去,好像使用了框架代码更多了,其实不是,使用框架以后,能够使耗时操做(例如Http操做)和UI更新操做分离。使代码更加简洁可维护。第二,若是使用Thread和Handler来实现,还须要本身实现ProgressDialog,用来提醒用户,相似于:正在加载中...这样的对话框,而这一点框架都帮你完成了。固然方便向左,灵活向右,框架能够知足大部分逻辑操做,若是须要更灵活,例如,在Http加载中,提示用户加载进度百分比,那么框架就不能知足了,这时候只能本身用Thread和Handler去实现。不过这方面需求很少,固然框架还在发展,有待支持更灵活,还在等什么,期待你的加入。
ide

相关文章
相关标签/搜索