我似乎有一个经典的任务,但我找不到任何如何完成它的示例。
我想要下载一些东西。嗯,我调用了一个 Web 服务并获得了响应... 但基本上都是一样的。
为了做到这一点,我有一个活动启动了一个服务,该服务生成一个线程来完成工作。
现在,我想在启动该服务的活动中使用所得到的数据。
(我假设启动另一个处理显示结果的活动会很简单)
我的问题是,服务如何通知活动(启动它或其他活动)某些事情?
非常感谢任何指向示例的指针。
问候
我似乎有一个经典的任务,但我找不到任何如何完成它的示例。
我想要下载一些东西。嗯,我调用了一个 Web 服务并获得了响应... 但基本上都是一样的。
为了做到这一点,我有一个活动启动了一个服务,该服务生成一个线程来完成工作。
现在,我想在启动该服务的活动中使用所得到的数据。
(我假设启动另一个处理显示结果的活动会很简单)
我的问题是,服务如何通知活动(启动它或其他活动)某些事情?
非常感谢任何指向示例的指针。
问候
Activity
和 Service
在同一个应用程序中,则使用 LocalBroadcastManager 要优于 sendBroadcast(intent),因为发送的信息不会经过系统,从而消除了被拦截的风险。BroadcastReceiver
,并在 onResume() 方法中动态添加监听器:private BroadcastReceiver bReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//put here whaterver you want your activity to do with the intent received
}
};
protected void onResume(){
super.onResume();
LocalBroadcastManager.getInstance(this).registerReceiver(bReceiver, new IntentFilter("message"));
}
protected void onPause (){
super.onPause();
LocalBroadcastManager.getInstance(this).unregisterReceiver(bReceiver);
}
在你的服务中,您将获得一个LocalBroadcastManager实例并使用它来发送意图。我通常会将其放在自己的方法中,如下所示:
private void sendBroadcast (boolean success){
Intent intent = new Intent ("message"); //put the same message as in the filter you used in the activity when registering the receiver
intent.putExtra("success", success);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
startService(Intent)
方法启动服务并传递Intent。 - JDenaisbindService
和回调。这可以避免实现可包裹接口而不是sendBroadcast
。IntentService
,则可以查看ResultReceiver
。详细信息和示例可在此文章中找到:
Android:restful API service
希望能有所帮助。bindService()
概念的很好的示例,正确地实现了该概念。 - Eido95我的博客文章涵盖了所有这些方法。