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

标签 android service android-asynctask background-process

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

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

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

最佳答案

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

编辑

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

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

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

关于Android - 执行异步任务的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949509/

相关文章:

服务停止时Android更新当前 Activity

java - JAR 中的静态变量在进程之间共享?

android - 如何使用Volley库通过套接字(IP地址)和端口号(例如1234)进行网络调用?

java - Maven 不会运行 Android 仪器测试

Android Studio API 级别 28 : Rotating emulator does not rotate the app contents or device UI

Android 保存列表<String>

android - 无法继承样式上的按钮颜色

angularjs - $http 通过服务调用,然后将数据拉入 Controller (AngularJS)

android - 如何在AsyncTask android中处理HttpResponse

java - org.json.JSONException : End of input at character 0 of