我在尝试找出遵循 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/