服务如何将结果返回到活动

我似乎有一个经典的任务,但我找不到如何做到这一点的任何例子。

我想下载一些东西。 那么我打电话给一个Web服务,得到一个回应…但它几乎是一样的。

为了做到这一点,我有一个活动,开始一个服务,产生一个线程,完成这项工作。

现在我想使用我在启动服务的活动中获得的数据。

(我认为开始另一个活动来处理显示结果的工作将是简单的)

我的问题是如何通知一个活动(启动它或另一个)的活动?

任何指向示例的指针都非常感谢。

问候

通过sendBroadcast()发送广播意图与数据,该活动拿起一个BroadcastReceiver。

下面是一个例子: https : //github.com/commonsguy/cw-android/tree/master/Service/WeatherAPI Doc: http : //developer.android.com/reference/android/content/BroadcastReceiver.html

根据谷歌文档,如果你的活动和服务是在同一个应用程序内,使用LocalBroadcastManager优于sendBroadcast(intent),因为发送的信息不通过系统,消除了被拦截的风险。 http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

这很容易使用。

在您的活动中,创build一个BroadcastReceiver并在onResume()方法中dynamic添加一个监听器:

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的实例,并用它来发送一个intent。 我通常这样用自己的方法:

 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); } 

如果您需要返回各种types的数据,例如用户定义的类,则可以尝试bindService和callback。 这可以避免实现可发送的接口比sendBroadcast

请看我的post中的例子:

https://stackoverflow.com/a/22549709/2782538

而且,如果使用IntentService ,则可以查看ResultReceiver 。 细节和样本可以在这篇文章中find:

Android:宁静的API服务

希望能帮助到你。