Android异步线程框架封装

“Perl之父Larry Wall说到“懒惰、傲慢、缺乏耐性是程序员的三大美德”。

我可能已经具备了一个程序开发人员应具有的美德吧——懒于书写基本一样的代码,即使封装一个新的方法需要更多时间。

Android系统如果在主线程访问网络会抛出异常,导致程序退出。为此,Google提供了AsyncTask这样一个异步线程类。使用很方便,但是如果直接用会可能会比较麻烦(至少我这样人为)。在公司上一个Android项目中封装了一个类,用这个类可以很方便地使用AsyncTask。

其中Paser为解析器接口,用于解析服务器返回的数据;GateWay接口为网络出口类;UpdateUI用于更新UI。

/**
 * 基于Android异步线程(AsyncTask)的网络操作类 <br>
 * 因为AsyncTask不能重用,所以该类在一次execute后也不能重用<br>
 * 使用方法:<br>
 * <p>
 * new NetLoader(parser,update).execute(order);
 * </p>
 *或<p>
 *     NetLoader.run(order,parser,upUi);
 *</p>
 * @author Memory_Leak
 */
public class NetLoader<T> extends AsyncTask<Order, Void, Result<T>> {
    private Parser<T> parser = null;
    private UpdateUI<T> updateUI = null;

    /**
     * @param parser   解析器
     * @param updateUI 更新UI
     * @see ireal.here.data.Parser
     * @see UpdateUI
     *
     */
    public NetLoader(Parser<T> parser, UpdateUI<T> updateUI) {
        this.parser = parser;
        this.updateUI = updateUI;
    }

    @Override
    protected Result<T> doInBackground(Order... params) {
        GateWay gateWay = new HttpGateWay(true);
        return gateWay.send(params[0], parser);
    }

    @Override
    protected void onPostExecute(Result<T> result) {
        super.onPostExecute(result);
        if (updateUI == null)
            return;
        updateUI.update(result);
    }

    public static <T> void run(Order<?> order, Parser<T> parser, UpdateUI<T> ui) {
        new NetLoader<T>(parser, ui).execute(order);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值