Android异步线程框架封装

来源:互联网 发布:阿里域名 编辑:程序博客网 时间:2024/05/29 19:15

“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
原创粉丝点击