2013-11-04 85 views
4

有谁知道为什么doInBackground需要很长时间才能开始?这里有一个例子: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 ... 
    } 

} 

如果在低速行驶的原因是其他干扰线程(我怀疑),我怎么给这个最高优先级?

+0

你怎么知道它很慢? – Szymon

+1

您在哪里看到“打印”语句?实际上,我正在使用system.out.println进行日志记录,以了解它需要多长时间。在第一个打印语句之后,它需要很长的时间来看到第二个print语句。 –

+1

什么时间差? – petey

回答

4

它取决于您的Android版本是如何执行AsyncTasks的。它们在API5(2.0) - API 10(2.3.3)上并行执行。从API 11开始,它们按默认顺序再次执行。正如zapl提到你必须致电

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

使他们再次运行并列。

+0

我已经改变了那个注释之后所以有一个问题(也许很明显)如果我有多个AsyncTask和各指定'AsyncTask.THREAD_POOL_EXECUTOR',我要他们都使用相同的线程池承担,右 –

+0

烨 - 但池确实含有多个线程,甚至在需求一定数目创建新的最多 –

+0

太谢谢你了!它也解决了我的问题 – Yehonatan

相关问题