是通过AsyncTask从不同的活动调用一个服务好吗?

时间:2011-11-09 11:54:22

标签: android android-service android-asynctask

我每秒都有一个Service来自网络服务器的下载数据(此Service是从我的主Activity启动的)。在我的应用中,还有其他Activity个,需要根据Service下载的数据刷新用户界面。

我的想法是为每个Activity提供一个AsyncTask,它将每秒从Service检索一小部分数据。然后AsyncTask会告诉用户界面更新。

直到昨天我都在完成AsyncTask,但今天早上我在stackoverflow上读到了检索数据并将其提供给多个Activity的{​​{1}}工作而不是Service 1}}一个。

所以我提出了这个(不那么好甚至是一点点)治疗的解决方案,因为我找不到如何通过{{检索数据时通知我的AsyncTask 1}}。 我读到了关于广播接收器,听众,意图......但是无法弄清楚如何定期让Activity“订阅”这个服务。

感谢您的帮助。

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 在服务中你可以创建getter&处理程序的设定者。
  2. 在您的活动开始时设置活动的处理程序,这将使服务具有当前可见的活动的处理程序。
  3. 使用此处理程序实例向活动通知数据。
  4. 关注此link处理程序。

答案 1 :(得分:0)

所以这就是我如何实现我的目标(感谢 Vineet Shukla ):

在活动" 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);