Android 创建异步任务花费了太多时间
我正在AsyncTask中进行网络调用,但我面临的问题是启动doInBackground方法所需的时间 以下是我代码的一部分:Android 创建异步任务花费了太多时间,android,android-asynctask,Android,Android Asynctask,我正在AsyncTask中进行网络调用,但我面临的问题是启动doInBackground方法所需的时间 以下是我代码的一部分: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("Temp:",System.currentTimeMillis()+"");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Temp:",System.currentTimeMillis()+"");
new Move().execute();
/*some other logic
}
}
我的任务是:
private class Move extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... temp) {
Log.d("start:",System.currentTimeMillis()+"");
gson.fromJson(Web.Request.get(some_URL),Void.class);
Log.d("end:",System.currentTimeMillis()+"");
return null;
}
}
所以实际上,在doInBackground方法中,到达第一行几乎需要29秒,因为完成网络呼叫只需要36毫秒。我试了很多次,所花的时间几乎是一样的
是否可以立即启动异步任务?或者有没有其他方法可以解决这个问题(除了运行一个简单的线程?)
谢谢:)如果您有任何其他任务正在运行,则
异步任务
正在等待其他异步任务
完成运行(请检查是否运行)
看
执行顺序
首次引入时,异步任务是在单个后台线程上串行执行的。从DONUT开始,它被更改为一个线程池,允许多个任务并行运行。从蜂巢开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误
如果确实需要并行执行,可以使用线程池执行器调用executeOnExecutor(java.util.concurrent.Executor,Object[])
如果同时执行另一个AsyncTask,则您的AsyncTask可能正在等待前一个AsyncTask完成。但是,您可以强制异步任务在多线程中启动
Move task = new Move();
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
task.execute();
希望这对您有所帮助,有关更多信息,您可以阅读此有用的您在/*其他逻辑*中有什么?您是否尝试对其进行评论并再次测试?您有onPostExecute覆盖吗?理想情况下,我所谓的“其他一些逻辑”不应该影响AsyncTask,对吗?因为它们现在是两个不同的线程。顺便说一下,我只是在逻辑部分做一些计算。为什么您的Move实例没有()括号?您是否可以这样实例化它:new Move().execute()?在最近的androud版本中,AsyncTasks在用于此目的的单个线程上按顺序执行,因此它们可以相互阻止-但您可以更改这种行为。@在实际代码中可能没有语法错误,只是忘了在此处编写。Thanx很多:)。。。。。。这正是在将其更改为在不同线程中执行后发生的情况。几位女士只花了29秒。谢谢,这很有帮助
Move task = new Move();
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
task.execute();