【问题标题】:Is calling one Service from different Activities through AsyncTask ok?可以通过 AsyncTask 从不同的活动中调用一项服务吗?
【发布时间】:2011-11-09 11:54:21
【问题描述】:

我有一个Service 每秒从网络服务器下载数据(这个Service 是从我的主Activity 启动的)。在我的应用程序中还有其他Activitys,每个人都需要根据Service下载的数据刷新他们的UI。

我的想法是给我的每个Activitys 一个AsyncTask,它将每秒从Service 检索少量数据。然后AsyncTask 将告诉 UI 进行更新。

直到昨天,我一直在通过 AsyncTask 完成工作,但我今天早上在 stackoverflow 上读到,检索数据并将其提供给几个 Activitys 更像是 Service 的工作,而不是 AsyncTask 的工作。

所以我想出了这个(不是那么好,甚至有点糟糕)的解决方案,因为当Service 检索到数据时,我找不到如何通知我的Activitys。 我阅读了有关广播接收器、侦听器、意图的信息……但不知道如何让我的Activity 定期“订阅”这项服务。

感谢您的帮助。

PS : 像这样在我的写作中对我的每个关键字进行编码是不是很荒谬:)?

PS2:我的应用程序的用例是从 Web 服务中检索温度、压力等,并在不同的 Activity 中监控这些量(我无法在同一个 Activity 中监控它们)。

【问题讨论】:

  • 评论你的第一个“PS”:是的,看起来有点咄咄逼人 imo :)
  • 好的,我会在以后的问题中记住这一点。

标签: android android-service android-asynctask


【解决方案1】:

数据可以通过 Handler 从服务中刷新。

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

关注link 获取处理程序。

【讨论】:

  • 感谢 Vineet Shukla。所以我创建了一个带有计时器的处理程序,例如每 1000 毫秒它会调用服务中的 getter 吗?我做对了吗?如果是的话,与我所说的 AsyncTask 有什么区别......除了显而易见的:)。
  • 你为什么要使用倒数计时器?当您来到活动时,将其处理程序设置为服务,以便您的服务拥有当前可见活动的处理程序。
  • 我想我在这里错过了一些知识对不起。对我来说,处理程序位于不同的线程中,使您能够使用计时器定期检查某些内容。就像在 doInBackGround 中有一个循环的 AsyncTask。当然,在这两种情况下,您只能使用一次,无需计时器或循环。我不明白如何将活动的处理程序与服务链接,以便定期或每次从 Web 服务器获取值时从中检索值。
  • 当您有一些活动数据时,您将从处理程序发送 mag,并且您将在活动中收到此消息。收到消息后,您可以更新您的活动。
  • 我发布了我认为您向我描述的解决方案,最后一件事我的处理程序必须是静态的才能从服务中调用......没有办法吗?
【解决方案2】:

这就是我如何实现我想要的(感谢Vineet Shukla):

在Activity“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 
    }  
};

在服务中,添加:

Message mMessage = new Message();
ServiceConsumerActivity.mRefreshHandler.sendMessage(mMessage);

【讨论】:

  • 能否请您也写下showServiceData函数。谢谢
  • 对不起,它太旧了。什么都不记得了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多