yangfuhai / afinal

Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。详情请通过以下网址查看。
3.16k stars 1.49k forks source link

[question] 请问一下,代码里重写AsyncTask的目的是什么? #18

Closed kris520 closed 11 years ago

kris520 commented 11 years ago

你的注释写的是“修改了线程池属性,让并发线程按顺序执行”,我和Android源码对比了下,发现改动的地方以下几处:

1、 public Thread newThread(Runnable r) { return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); }

-->

public Thread newThread(Runnable r) { Thread tread = new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); tread.setPriority(Thread.NORM_PRIORITY - 1); return tread; }

2、 public static final Executor SERIAL_EXECUTOR = Utils.hasHoneycomb() ? new SerialExecutor() : Executors.newSingleThreadExecutor(sThreadFactory);

-->

public static final Executor SERIAL_EXECUTOR = new SerialExecutor();

3、 public static final Executor DUAL_THREAD_EXECUTOR = Executors.newFixedThreadPool(2, sThreadFactory);

-->

public static final Executor DUAL_THREAD_EXECUTOR =Executors.newFixedThreadPool(3, sThreadFactory);

我觉得你的改动主要是(2),我想问的是你这么改的目的是什么,为什么必须让他顺序执行,不顺序执行的话,会有什么问题啊?

kris520 commented 11 years ago

已经咨询过作者了,顺序执行的目的是为了加载图片的时候能一张一张顺序的出现,而不是东一张西一张的出现。

feng88724 commented 11 years ago

AsyncTask 4.0就是顺序执行的

feng88724 commented 11 years ago

无聊的的去看了下4.0源码, 这个类应该就是从4.0里来的

dodola commented 11 years ago

感觉从队列改成栈的方式要好的多,后进先出