【发布时间】:2016-10-23 07:15:04
【问题描述】:
我有一个非常密集的任务,我解析存储在资产中的大约 100 个 json 文件并从中创建一个树结构.. 然后我根据结果树更新 UI。l
目前,我正在使用 AsyncTask 来完成这项工作。
但是,我正在寻找更好、更高效、更干净的方法来做到这一点。我应该使用的任何库或任何其他内置功能?
【问题讨论】:
标签: android service android-asynctask background-process
我有一个非常密集的任务,我解析存储在资产中的大约 100 个 json 文件并从中创建一个树结构.. 然后我根据结果树更新 UI。l
目前,我正在使用 AsyncTask 来完成这项工作。
但是,我正在寻找更好、更高效、更干净的方法来做到这一点。我应该使用的任何库或任何其他内置功能?
【问题讨论】:
标签: android service android-asynctask background-process
我会在这里使用IntentService。它已经提供了一个后台线程,一旦完成它就会自行停止。如果之后需要更新 UI,可以使用Handler 或BroadcastReceiver。
编辑
您仍然可以使用AsyncTask,但仍然可以从Service 开始。 AsyncTask 只是 java 线程的包装器,它不是 Android 组件。您必须从某些上下文开始,在这种情况下它是Activity 或Service。
如果您从Activity 启动它,那么您的长时间运行将取决于 UI,这在大多数情况下会导致内存泄漏。 Service 是一个独立于 UI 运行的后台组件。此外,Service 将提高您应用的进程优先级,以便在系统运行在低内存时它不太可能被 Android 杀死。
如果您使用IntentService,则不再需要AsyncTask,它已经在后台线程上运行。如果您想使用常规的Service,则需要自行实现后台执行。例如通过 java 线程或异步任务。
【讨论】:
Handler,或者,BroadcastReceiver,任何更适合您的方法。在某些情况下,如果使用数据库,您可以注册一个加载程序或ContentObserver,一旦您将数据写入数据库,就会触发它。解决方案取决于您的用例。
如果这很繁重且运行时间很长,请使用Service 并使用广播接收器进行通信。
【讨论】: