非UI线程的线程池的封装

本文介绍了一种解决Android中UI线程并发问题的方法。针对AsyncTask无法并行执行任务的局限性,提出了一种基于ThreadPoolExecutor的封装方案,允许多个任务同时执行,并提供了回调机制以更新UI。

非UI线程的线程池的封装

Android中很多操作都不能在Ui线程中进行,数据库读写,访问网络等等。AsyncTask正是为了解决这个问题,但是,AsyncTask有一个问题是所有的AsyncTask的操作只能顺序执行,
AsyncTaskB必须要等到AsyncTaskA执行完毕后,才能执行。貌似是从Sdk的某个版本之后才开始这样,没有具体考证。
AsyncTask内部维护一个Runnable的队列,顺序执行队列中的task, 虽然也是用ThreadPoolExecutor来执行task, 但是郁闷的是每次只抛一个task到thread pool,这个thread pool实在是清闲。

AsyncTask实现算是比较简单,还不如根据实际需要自己对ThreadPoolExecutor封装一下,于是写了一个线程池操作的小工具。

主要功能如下,很简单,本人在实际项目中使用过几次,基本也够用了,主要是用起来还算方便,至少不用经常写启动后台线程的代码了。

  1. 多线程并发执行
  2. 在线程池中启动一个线程,在后台执行指定任务
  3. 可以指定callback调用函数,用于处理线程执行完毕的返回结果
  4. 可以指定callback调用的执行线程
  5. 提供两个接口分别用于用真实数据更新Ui或者用模拟数据更新Ui

代码及Demo

下载

简单示例:

        mText = (TextView) findViewById(R.id.text);

        Callback<Integer> callback = new Callback<Integer>() {
            @Override
            public void handleCallback(Integer result) {
                mText.setText("abc " + result);
            }
        };

        new AbstractInteractor(new PostbackHandler(getMainLooper()), callback) {
            public void syncData() {
                doCallback(100);
            }

            public void syncFakeData() {
            }
        }.execute();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值