在AsyncTask :: execute被调用之后,AsyncTask的doInBackground开始执行太晚了

我写了一个AsyncTask,大部分时间在它的构造函数被调用和doInBackground被调用之间没有延迟(延迟0毫秒)。 但是当联系人同步发生在后台时,我经常会在我的AsyncTasks的构造函数和doInBackground之间经历1-3秒的延迟。 在我的情况下这种拖延是不能接受的。 我知道AsyncTask是一个后台线程,可以通过使用Thread并将其优先级设置得更高来解决此问题。 但是我想知道的是,我怎么知道是什么原因导致我的AsyncTask的doInBackground被调用? 我用adbshell顶级-m 10,当这个问题发生时,进程的使用看起来很正常。

任何帮助表示赞赏。

谢谢

Solutions Collecting From Web of "在AsyncTask :: execute被调用之后,AsyncTask的doInBackground开始执行太晚了"

我也长期面对这个问题,但现在解决了。 使用下面的代码

new AsyncTaskName().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

而不是代码

 new AsyncTaskName().execute(); 

这将解决后期运行doInbackground的问题。

我们一般不会为jvm调度任务。 事实上,我们也不需要打扰。

如果在应用程序中尽可能快地执行某些操作,可以在构造函数中使用它,或者使用Asynctask的onPre(记住它在UI线程上执行)。

但我同意在doInBackgroud调用Android AsyncTask我自己目睹了doInbackground没有被调用后,在onPre中有些东西可疑。 你也可以谷歌这一点。 很多人都面对过这个问题。 我搬到使用传统线程。

我写了我自己的Asynctask使用传统的线程在核心和模仿onPre和onPost我使用Handler。 你也可以去那个选项。

区分创build和执行任务很重要。 (一个ASyncTask有一个单独的execute()方法,以及一个构造函数,你已经注意到了。)

创build一个线程可能是相当昂贵的,所以你可能会发现,提前创build任务,然后只在正确的时间执行它,会产生更好的结果。

如果后台操作可能会经常重复,那么您可能会发现一个IntentService (在后台线程中一次处理请求)更合适。