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