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

时间:2016-06-21 16:11:32

标签: android service android-asynctask background-process

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

更新UI

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

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

2 个答案:

答案 0 :(得分:1)

我会在这里找IntentService。它已经提供了一个后台线程,一旦完成就会自动停止。如果您之后需要更新用户界面,则可以使用HandlerBroadcastReceiver

修改

您仍然可以使用AsyncTask,但仍然可以从Service启动它。 AsyncTask只是java线程的包装器,它不是Android组件。您必须从某些上下文启动它,在这种情况下,它可以是ActivityService

如果从Activity启动它,那么长时间运行的操作将取决于在大多数情况下会导致内存泄漏的UI。 Service是一个独立于UI运行的后台组件。此外,Service会增加应用的进程优先级,以便在系统内存较低时,Android不太可能被其杀死。

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

答案 1 :(得分:0)

如果这很重且长时间运行,请使用self.tabBarController!.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Compose, target: self, action: #selector(addNew)) self.tabBarController!.navigationItem.leftBarButtonItem = self.editButtonItem() 并使用广播接收器进行通信。