xUtils 源码解析(二)

接下来我们看看task模块下有哪些类。


屏幕快照 2018-01-28 14.35.02.png
  • Priority类,是一个枚举类定义了一些级别
public enum Priority {
    UI_TOP,
    UI_NORMAL,
    UI_LOW,
    DEFAULT,
    BG_TOP,
    BG_NORMAL,
    BG_LOW;
}
  • TaskHandler定义了一些接口。
public interface TaskHandler {
    boolean supportPause();
    boolean supportResume();
    boolean supportCancel();
    void pause();
    void resume();
    void cancel();
    boolean isPaused();
    boolean isCancelled();
}
  • PriorityObject,就是给一个对象加上一个优先级而已。
public class PriorityObject<E> {

    public final Priority priority;
    public final E obj;

    public PriorityObject(Priority priority, E obj) {
        this.priority = priority == null ? Priority.DEFAULT : priority;
        this.obj = obj;
    }
}
  • PriorityRunnable 带有优先级的一个Runnable
public class PriorityRunnable extends PriorityObject<Runnable> implements Runnable {

    public PriorityRunnable(Priority priority, Runnable obj) {
        super(priority, obj);
    }

    @Override
    public void run() {
        this.obj.run();
    }
}
  • PriorityExecutor ,就是自定义了一个线程池


    屏幕快照 2018-01-28 14.46.57.png
public class PriorityExecutor implements Executor {
    private static final ThreadFactory sThreadFactory = new ThreadFactory() {
        private final AtomicInteger mCount = new AtomicInteger(1);
        @Override
        public Thread newThread(Runnable r) {
            return new Thread(r, "PriorityExecutor #" + mCount.getAndIncrement());
        }
    };

    private final BlockingQueue<Runnable> mPoolWorkQueue = new PriorityObjectBlockingQueue<Runnable>();
    private final ThreadPoolExecutor mThreadPoolExecutor;

    public PriorityExecutor() {
        this(CORE_POOL_SIZE);
    }

    public PriorityExecutor(int poolSize) {
        mThreadPoolExecutor = new ThreadPoolExecutor(
                poolSize,
                MAXIMUM_POOL_SIZE,
                KEEP_ALIVE,
                TimeUnit.SECONDS,
                mPoolWorkQueue,
                sThreadFactory);
    }

    public boolean isBusy() {
        return mThreadPoolExecutor.getActiveCount() >= mThreadPoolExecutor.getCorePoolSize();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前段时间遇到这样一个问题,有人问微信朋友圈的上传图片的功能怎么做才能让用户的等待时间较短,比如说一下上传9张图片,...
    加油码农阅读 1,303评论 0 2
  • 【JAVA 线程】 线程 进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者...
    Rtia阅读 2,907评论 2 20
  • 由于从wordpress将文章倒回,发现格式有点混乱,经努力调整后依然有部分的格式还未调教好,请多多包涵. 分析A...
    walker_lee0707阅读 1,348评论 3 51
  • 使用工具:2B,5B铅笔(用B数更高点的铅笔加阴影效果更好)擦笔,橡皮。 我拍过程一向不太注意打光,不过大体还是清...
    吾栖梦阅读 1,348评论 1 12
  • 球球Emily阅读 248评论 0 0

友情链接更多精彩内容