doInBackground需要很长时间才能启动

4

有人知道为什么doInBackground方法需要很长时间才能开始吗?以下是一个示例:

runDoInBackground(){
   print("starting task");
   new MyAsyncTask(someObject,otherObject).execute((Void)null);
}

private class MyAsyncTask extends<Void,Void,Integer>{
   SomeObject someObject;
   OtherObject otherObject;

   public MyAsyncTask(SomeObject someObject, OtherObject otherObject){
      this.someObject=someObject;
      this.otherObject = otherObject;
   }

   @Override
   protected Integer doInBackground(Void... params) {
      print("start background run")
      ... work ... get from server ...
   }

}

如果缓慢运行的原因是其他干扰线程(我对此表示怀疑),我该如何将此线程优先级设置为最高?

1
你在哪里看到了“print”语句?实际上我是用system.out.println进行日志记录,只是为了查看它需要多长时间。在第一个打印语句之后,要花很长时间才能看到第二个打印语句。 - Cote Mounyo
1
时间差是多少? - petey
2
所有的异步任务默认使用相同的执行器(http://developer.android.com/reference/android/os/AsyncTask.html#SERIAL_EXECUTOR),如果任务需要时间,则会等待。 - zapl
这段代码无法编译。 - njzk2
定义“长时间”。多少天? - njzk2
显示剩余3条评论
1个回答

4

AsyncTasks的执行方式取决于您的Android版本。在API5(2.0)- API 10(2.3.3)上,它们是并行执行的。从API 11开始,默认情况下再次串行执行。正如zapl所提到的,您需要调用相应方法。

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void)null);

使它们再次并行运行。


我在注释后进行了更改。所以有一个问题(可能很明显)。如果我有多个AsyncTask,并且每个都指定了AsyncTask.THREAD_POOL_EXECUTOR,那么我应该假设它们都使用相同的线程池,对吗? - Cote Mounyo
是的 - 但线程池包含几个线程,甚至可以根据需求创建多个线程,最多达到一定数量。 - Simon Meyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接