非UI线程的线程池的封装
Android中很多操作都不能在Ui线程中进行,数据库读写,访问网络等等。AsyncTask正是为了解决这个问题,但是,AsyncTask有一个问题是所有的AsyncTask的操作只能顺序执行,
AsyncTaskB必须要等到AsyncTaskA执行完毕后,才能执行。貌似是从Sdk的某个版本之后才开始这样,没有具体考证。
AsyncTask内部维护一个Runnable的队列,顺序执行队列中的task, 虽然也是用ThreadPoolExecutor来执行task, 但是郁闷的是每次只抛一个task到thread pool,这个thread pool实在是清闲。
AsyncTask实现算是比较简单,还不如根据实际需要自己对ThreadPoolExecutor封装一下,于是写了一个线程池操作的小工具。
主要功能如下,很简单,本人在实际项目中使用过几次,基本也够用了,主要是用起来还算方便,至少不用经常写启动后台线程的代码了。
- 多线程并发执行
- 在线程池中启动一个线程,在后台执行指定任务
- 可以指定callback调用函数,用于处理线程执行完毕的返回结果
- 可以指定callback调用的执行线程
- 提供两个接口分别用于用真实数据更新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();
本文介绍了一种解决Android中UI线程并发问题的方法。针对AsyncTask无法并行执行任务的局限性,提出了一种基于ThreadPoolExecutor的封装方案,允许多个任务同时执行,并提供了回调机制以更新UI。
7610

被折叠的 条评论
为什么被折叠?



