2014-05-03 94 views
0

我试图找出遵循Android最佳实践来完成一个简单应用程序的最佳方法。下面是情形:Android服务和async服务通信

1)I有其中用户输入了一些活动,其然后发送到一个背景服务

2)背景服务对输入的一些检查,并产生一个新的AsyncTask处理输入。

3)的的AsyncTask与它的进度和状态

4)有结合到服务,从服务显示当前正在运行的任务列表中的第二个活动的服务更新一个状态的Hashmap和他们的进步。这个想法是,即使此活动已关闭,服务仍将继续运行任务,并且当活动重新打开时,将显示刷新的统计信息。

我有问题,3和4。什么是沟通,服务的最佳方式从的AsyncTask的onProgressUpdate方法中,并在同一时间,如果它打开,如果不是它的简单打开更新的上市活动,只需更新服务跟踪地图,当活动打开时,它会读取并更新。

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

+0

我已经完成了一些您的问题很熟悉的任务。我创建了一个服务,它向服务器请求数据并响应回活动。当我的android应用程序在每10秒钟调用一次该服务的'ScheduledThreadPoolExecutor'中运行时,我正在调用服务。并且'AynsTask'在'Service.java'类的** onStartCommand **方法中调用。 –

+0

但我的服务只启动一次,并且只有一个实例,并且活动在启动时通过活页夹绑定到它。你是如何在AsyncTaks和服务之间进行沟通的? – Feras

+0

我没有将我的服务与任何活动绑定。我在** onStartCommand **方法中执行'AynsTask',然后**提交**'SharedPreference'的数据用于将来使用。 –

回答

2

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

代替我的复制和粘贴洛塔代码,请Vogella对服务的教程,尤其是运动(7练习:使用服务和业务通信),这里

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

发现在演习,您正在寻找DownloadService.publishResults(...)方法,该方法将广播从服务发送到哪个broadcastreceiver正在侦听更新,以及使用MainActivity中的BroadcastReceiver处理来自服务的更新。