android - 如果我在 onCreate 期间启动 AsyncTask,它什么时候开始执行?

标签 android android-asynctask android-lifecycle

我想确保我不会减慢我的应用程序的启动时间并且需要启动一个与用户输入无关的后台任务——例如,填充缓存。

如果我从我的onCreate 方法启动一个AsyncTaskdoInBackground 方法何时真正开始执行? (假设单核设备)

Android 是否可以在 onCreate/onResume 完成之前安排它,或者它是否足够聪明,可以识别后台线程在 UI 线程完全完成之前不应该运行?

最佳答案

如果您查看 AsyncTask source code你会看到它只是使用 ThreadPoolExecutor 或串行执行器来运行任务。默认内部行为取决于 Android 版本(来自 AsyncTask 文档):

When first introduced, AsyncTasks were executed serially on a single background thread. Starting with DONUT, this was changed to a pool of threads allowing multiple tasks to operate in parallel. Starting with HONEYCOMB, tasks are executed on a single thread to avoid common application errors caused by parallel execution.

但是无论如何,doInBackground 的执行与Activity 生命周期无关,因此AsyncTask 几乎可以在任何时候执行。这仅取决于您已经启动了多少任务,取决于 AsyncTask 使用的默认 Executor 和线程调度程序。

关于android - 如果我在 onCreate 期间启动 AsyncTask,它什么时候开始执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11494852/

相关文章:

android - iOS/Android 跨平台开发

java - Handler、Runnable 和 Threads 之间有什么区别?

android - 是否可以从 AsyncTask 内部调用另一个函数?

Android:在AsyncTask.doInBackground中,循环被强行打破

android - DialogFragment - 设置初始值并在旋转后保持状态

android - handleLifecycleEvent 和 markState 之间有什么区别(来自 LifecycleRegistry 类)

android - 当 App 终止时,Android 中的后台数据收集器会重新启动

android - 如何从 url 下载文件/图像到你的 android 应用程序

android - EditText 应用样式奇怪的行为

android - 如何将数据传递给前一个 Activity 之前的 Activity