2011-11-09 14 views
0

我有一个Service下载数据每次从网络服务器第二(这Service是从我的主Activity推出)。在我的应用程序中有其他Activity s他们每个人都需要根据Service下载的数据刷新他们的用户界面。通过AsyncTask从不同的活动调用一个服务好吗?

我的想法是给我的每个Activity s一个AsyncTask,它将每秒从Service中检索一小部分数据。然后AsyncTask将告诉UI更新。

直到昨天我都在做,通过AsyncTask,但我对计算器今天早上读到的数据并给它几个Activity s是一个多AsyncTask一个Service工作。

所以我想出了这个(不是很好,甚至是一点点crapy)解决方案,因为我找不到如何通知我的ActivityService检索数据时。 我读到关于广播接收器,监听器,意图......但无法弄清楚如何才能让我的Activity的‘订阅’这一个服务周期。

感谢您的帮助。

PS:这是荒谬的代码示例我的每一个在我的写作像:)关键字?

PS2:我的应用程序的使用情况下,获取温度,压力等..从Web服务和监控每个这些量在不同的活动(我无法监控他们都在同一个活动)。

+0

评论:是啊,似乎有点咄咄逼人海事组织:) – eightx2

+0

好,我会记住这一点对未来的问题。 – mthpvg

回答

1

数据可以从服务活动被刷新了直通处理程序。

  1. 在服务中,您可以创建处理程序的getter & setter。
  2. 当你的活动启动,这将使该服务有哪些是当前可见的活动的处理程序设置活动的处理程序。
  3. 使用此处理程序实例向活动通知数据。

按照此link作为处理程序。

+0

谢谢维内特舒克拉。所以我用一个定时器创建一个Handler,例如每1000ms它会调用Service中的getter?我是否正确?如果是的,我所谈论的与AsyncTask有什么不同?除了显而易见的:)。 – mthpvg

+0

你为什么使用倒数计时器?当你来到这个活动,然后将它的处理程序设置为该服务,以便您的服务具有当前可见活动的处理程序。 –

+0

我想我在这里错过一些知识对不起。对我来说,Handler处于不同的线程中,并且可以让您用定时器定期检查某些内容。就像在doInBackGround中带有循环的AsyncTask一样。当然,在两种情况下,您只能使用一次,而无需计时器或循环。我不明白如何将活动的处理程序与服务关联起来,以便定期或每次从Web服务器获取值时从其中检索值。 – mthpvg

0

因此,这里是我达到我想要(感谢维尼特舒克拉)什么:

在活动 “ServiceConsumerActivity”,添加:

public static RefreshHandler mRefreshHandler; 

class RefreshHandler extends Handler 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     showServiceData(); //from which I call a method of the Service for getting the fetching value 
    } 
}; 

在服务,添加:

你的第一个“PS”
Message mMessage = new Message(); 
ServiceConsumerActivity.mRefreshHandler.sendMessage(mMessage); 
+0

你能否写下showServiceData函数?谢谢 – Piscean

+0

对不起,它太旧了。不记得有关它的事情。 – mthpvg

相关问题