我有一个非常密集的任务,我解析存储在资产中的大约100个json文件并从中创建一个树结构。 然后我根据结果tree.l
更新UI目前,我正在使用AsyncTask来完成这项工作。
但是,我正在寻找更好,更有效,更干净的方法来做到这一点。我应该使用的任何库或任何其他内置功能?
答案 0 :(得分:1)
我会在这里找IntentService
。它已经提供了一个后台线程,一旦完成就会自动停止。如果您之后需要更新用户界面,则可以使用Handler
或BroadcastReceiver
。
修改强>
您仍然可以使用AsyncTask
,但仍然可以从Service
启动它。 AsyncTask
只是java线程的包装器,它不是Android组件。您必须从某些上下文启动它,在这种情况下,它可以是Activity
或Service
。
如果从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()
并使用广播接收器进行通信。