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