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

2016-09-22  本文已影响0人  HEHE_fang

如果你是一个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方法

上一篇下一篇

猜你喜欢

热点阅读