我想确保我不会减慢我的应用程序的启动时间并且需要启动一个与用户输入无关的后台任务——例如,填充缓存。
如果我从我的onCreate
方法启动一个AsyncTask
,doInBackground
方法何时真正开始执行? (假设单核设备)
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/