asynctask部分--耗时操作的封装

喜你入骨 提交于 2020-03-01 10:52:38

1、简介

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();
2、 asynctask部分的使用详解

(1)首先,定义一个类,继承AbstractTask。如下面的代码:

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});

3、结尾

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



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!