java - Android服务和asynctask通信

标签 java android service android-asynctask

我在尝试找出遵循 Android 最佳实践完成简单应用程序的最佳方法时遇到问题。这是场景:

1)我有一个 Activity ,用户输入一些内容,然后将其发送到后台服务

2) 后台服务对输入执行一些检查,并生成一个新的 AsyncTask 来处理输入。

3) 异步任务使用其进度和状态更新服务中的状态 HashMap

4) 还有一个绑定(bind)到服务的 Activity ,用于显示服务中当前正在运行的任务及其进度的列表。我们的想法是,即使此 Activity 关闭,服务也将继续运行任务,并且当 Activity 重新打开时,将显示刷新的统计信息。

我在 3 和 4 中遇到问题。从 AsyncTask 的 onProgressUpdate 方法内与服务通信的最佳方式是什么,同时更新列表 Activity (如果已打开),如果未打开则更简单,只需更新服务跟踪 map ,当 Activity 打开时,它将读取它们并更新。

我不确定处理此类“事件”的标准方法是什么。您是否必须使用广播监听器和订阅者,或者对于这个简单的目的来说它太多了?

最佳答案

如果您想在服务和 Activity 之间进行通信,您可以在 AsyncTask.onProgressUpdate 方法中(或者在 AsyncTask.onPostExecute(Result) 中广播来自服务的更新) code> 方法)并使用 Activity 中的广播接收器监听更新。

不用我复制和粘贴大量代码,请查看 Vogella 的服务教程,尤其是练习(7.练习:使用服务和服务通信),可以在此处找到

www.vogella.com/tutorials/AndroidServices/article.html#tutorial_intentservice

在练习中,您将寻找 DownloadService.publishResults(...) 方法,该方法将广播从服务发送到正在监听更新的广播接收器,并使用MainActivity 中的 BroadcastReceiver,处理来自服务的更新。

关于java - Android服务和asynctask通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23440323/

相关文章:

c++ - 在 Windows 服务的通知栏中显示图标?

linux - 我需要使用 Linux 几天。网上有免费服务吗?

java - 随机数发生器

java - 如何找到 Java 代码库中的所有构造函数?

java - Sqlite 连接 ruby​​ java 桥

java - 在 kotlin 中操作时间的最佳方式是什么?

java - struts2中的响应问题

java - ArrayAdapter 的 getView() 很慢

android - Gradle同步失败:找不到方法defaultConfig()

java - Liferay 7 - 服务构建器 - 未显示 JSON Restful 服务