美文网首页
Android AsyncTask中的坑之线程顺序执行

Android AsyncTask中的坑之线程顺序执行

作者: HEHE_fang | 来源:发表于2016-09-22 08:39 被阅读0次

    如果你是一个android coder ,那么首先要具备,怀疑精神,其次要看源码啊看源码(一下问题针对api19源码)

    我要实现一个定时任务,方法很多,我想用AsyncTask,看起来很简单

    AsyncTask中可以执行的任务数是根据cpu的个数来做限定的CPU_COUNT * 2 + 1;

    AsyncTask的调用执行有三个方法

    1.public final AsyncTaskexecute(Params... params) 、2.public final AsyncTaskexecuteOnExecutor(Executor exec,

    Params... params)、3.public static void execute(Runnable runnable) 具体的使用看一下定义就知道,1,2中要实例化,3是类方法

    1,3都是调用的顺序执行(顺序执行就是你调用的任务要顺序执行的),如果上一次任务没有结束,会排队等待。。

    2.的结果就是最大可以产生CPU_COUNT * 2 + 1个线程,他们会并发,但是如果超出了,那么也会等待(待考证)

    那么有没有其他方法呢,有的public final boolean cancel(boolean mayInterruptIfRunning)可以调用线程的interrupt方法,

    更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。

    然后就会

    private void finish(Result result) {

    if (isCancelled()) {

    onCancelled(result);

    } else {

    onPostExecute(result);

    }

    mStatus = Status.FINISHED;

    }

    这句话的意思是如果取消了就不会执行onPostExecute方法了,而是执行另外的onCancelled方法

    相关文章

      网友评论

          本文标题:Android AsyncTask中的坑之线程顺序执行

          本文链接:https://www.haomeiwen.com/subject/ytuaettx.html