【问题标题】:Android service and asynctask communicationAndroid服务和asynctask通信
【发布时间】:2014-05-03 04:37:43
【问题描述】:

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

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

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

3) asynctask 使用其进度和状态更新服务中的 Status Hashmap

4) 还有一个绑定到服务的活动,以显示服务中当前正在运行的任务及其进度的列表。这个想法是,即使此活动已关闭,服务仍将继续运行任务,并且当活动重新打开时,将显示刷新的统计信息。

我在 3 和 4 中遇到问题。从 AsyncTask 的 onProgressUpdate 方法中与服务通信的最佳方式是什么,同时更新列表活动(如果它打开),如果它没有打开它更简单,只需更新服务跟踪地图,当活动打开时,它会读取它们并更新。

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

【问题讨论】:

  • 我已经完成了一些对您的问题很熟悉的任务。我创建了一个服务,它向服务器请求数据并响应一个活动。当我的 android 应用程序在 ScheduledThreadPoolExecutor 中运行时,我正在调用一个服务,它每 10 秒调用一次该服务。并且AynsTask 正在调用Service.java 类中的 onStartCommand 方法。
  • 但是我的服务只启动一次,并且只有一个实例,并且活动在启动时通过活页夹绑定到它。您是如何在 AsyncTaks 和服务之间进行通信的?
  • 我没有将我的服务与任何活动绑定。我在 onStartCommand 方法中执行 AynsTask,然后 commit 带有 SharedPreference 的数据 n 使用它以备将来使用。

标签: java android service android-asynctask


【解决方案1】:

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

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

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

在练习中,您正在寻找 DownloadService.publishResults(...) 方法,该方法从服务向正在侦听更新的任何广播接收器发送广播,以及在 MainActivity 中使用 BroadcastReceiver,它处理来自服务的更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多