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

Leo*_*hen 13 android android-asynctask

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

任何帮助表示赞赏.

谢谢

Mil*_*kla 39

我也长期面对这个问题,但现在它已经解决了.请使用以下代码

new AsyncTaskName().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Run Code Online (Sandbox Code Playgroud)

而是代码

new AsyncTaskName().execute();
Run Code Online (Sandbox Code Playgroud)

它会解决后期运行doInbackground的问题.


Jav*_*tor 2

我们一般不用关心jvm的任务调度。事实上我们也不必费心。

如果应用程序中需要尽快完成某些操作,请在构造函数本身中执行或使用 Asynctask 的 onPre (记住它在 UI 线程上执行)。

但我同意 Android AsyncTask 中的 doInBackgroud 调用有一些可疑之处,我自己亲眼目睹了 doInbackground 在 onPre 之后没有被调用。你也可以用谷歌搜索这个。很多人都曾面对过这个问题。我转而使用传统线程。

我使用传统线程作为核心编写了自己的 Asynctask,并使用 Handler 来模拟 onPre 和 onPost。您也可以选择该选项。