Android - 执行异步任务的最佳方式

Android - Best way to do asynchronous tasks

我有一个非常密集的任务,我解析存储在资产中的大约 100 个 json 文件并从中创建一个树结构.. 然后我根据结果 tree.l

更新 UI

目前,我正在使用 AsyncTask 来完成这项工作。

但是,我正在寻找更好、更高效、更干净的方法来做到这一点。我应该使用的任何库或任何其他内置功能?

如果这又重又长 运行 使用 Service 并使用 广播接收器 进行通信。

我会在这里选择 IntentService。它已经提供了一个后台线程,一旦完成就会自行停止。如果之后需要更新 UI,可以使用 HandlerBroadcastReceiver.

编辑

您仍然可以使用 AsyncTask,但仍然要从 Service 开始。 AsyncTask 只是 java 线程的包装器,它不是 Android 组件。您必须从某些上下文开始,在本例中它是 ActivityService

如果您从 Activity 开始,那么您的 long-运行 操作将取决于 UI,这在大多数情况下会导致内存泄漏。 Service 是独立于 UI 运行的后台组件。此外,Service 将提高您的应用程序的进程优先级,以便在系统 运行 内存不足时它不太可能被 Android 杀死。

如果您使用 IntentService,则不再需要 AsyncTask,它已经在后台线程上运行。如果你想使用常规 Service,你需要自己实现后台执行。例如,通过 java 线程或异步任务。