Android - 执行异步任务的最佳方式
Android - Best way to do asynchronous tasks
我有一个非常密集的任务,我解析存储在资产中的大约 100 个 json 文件并从中创建一个树结构..
然后我根据结果 tree.l
更新 UI
目前,我正在使用 AsyncTask 来完成这项工作。
但是,我正在寻找更好、更高效、更干净的方法来做到这一点。我应该使用的任何库或任何其他内置功能?
如果这又重又长 运行 使用 Service
并使用 广播接收器 进行通信。
我会在这里选择 IntentService
。它已经提供了一个后台线程,一旦完成就会自行停止。如果之后需要更新 UI,可以使用 Handler
或 BroadcastReceiver
.
编辑
您仍然可以使用 AsyncTask
,但仍然要从 Service
开始。 AsyncTask
只是 java 线程的包装器,它不是 Android 组件。您必须从某些上下文开始,在本例中它是 Activity
或 Service
。
如果您从 Activity
开始,那么您的 long-运行 操作将取决于 UI,这在大多数情况下会导致内存泄漏。 Service
是独立于 UI 运行的后台组件。此外,Service
将提高您的应用程序的进程优先级,以便在系统 运行 内存不足时它不太可能被 Android 杀死。
如果您使用 IntentService
,则不再需要 AsyncTask
,它已经在后台线程上运行。如果你想使用常规 Service
,你需要自己实现后台执行。例如,通过 java 线程或异步任务。
我有一个非常密集的任务,我解析存储在资产中的大约 100 个 json 文件并从中创建一个树结构.. 然后我根据结果 tree.l
更新 UI目前,我正在使用 AsyncTask 来完成这项工作。
但是,我正在寻找更好、更高效、更干净的方法来做到这一点。我应该使用的任何库或任何其他内置功能?
如果这又重又长 运行 使用 Service
并使用 广播接收器 进行通信。
我会在这里选择 IntentService
。它已经提供了一个后台线程,一旦完成就会自行停止。如果之后需要更新 UI,可以使用 Handler
或 BroadcastReceiver
.
编辑
您仍然可以使用 AsyncTask
,但仍然要从 Service
开始。 AsyncTask
只是 java 线程的包装器,它不是 Android 组件。您必须从某些上下文开始,在本例中它是 Activity
或 Service
。
如果您从 Activity
开始,那么您的 long-运行 操作将取决于 UI,这在大多数情况下会导致内存泄漏。 Service
是独立于 UI 运行的后台组件。此外,Service
将提高您的应用程序的进程优先级,以便在系统 运行 内存不足时它不太可能被 Android 杀死。
如果您使用 IntentService
,则不再需要 AsyncTask
,它已经在后台线程上运行。如果你想使用常规 Service
,你需要自己实现后台执行。例如,通过 java 线程或异步任务。