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

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去实现。不过这方面需求不多,当然框架还在发展,有待支持更灵活,还在等什么,期待你的加入。



转载于:https://my.oschina.net/u/266567/blog/151980

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值