活动和服务沟通

时间:2012-07-02 14:39:50

标签: android android-activity android-service

我的应用程序包含一个创建服务的活动。我希望只要应用程序正在运行,服务就会继续运行。我知道:

  1. 无法保证,因为Android系统可以在内存不足的情况下杀死活动,并且活动是在后台运行。
  2. 系统可以停止(并终止)服务。
  3. 如果我将服务绑定到活动,则活动将在服务停止或启动时收到通知。但是,如果活动在后台运行(onStop()),服务可能会停止运行。如果我错了,请纠正我。
  4. 如果我在onStop()的onResume()和onStop()的unbind()中绑定服务,那么当我的应用程序进入后台时,服务可能会停止运行。如果我在活动的onDestroy()中绑定onCreate()和unbind(),这是否意味着即使在后台,我的活动也会继续从服务获取通知。
  5. 只要应用程序正在运行,保持服务运行并从服务向Activity获取通知的最佳方法是什么。请注意,应用程序中只有一个活动,因此在后台发送活动意味着应用程序将在后台运行。
  6. 由于

4 个答案:

答案 0 :(得分:0)

如果您将Service绑定到Activity。它只是意味着只要您的活动正在运行,您就需要运行服务。如果您不需要将Service与活动绑定,或者在UI正在运行时无需更新Service。您不得将Service绑定到Activity。在这种情况下,对于Service执行的不同操作,您可以使用Android Notifications通知用户。就像通知用户xx下载已经完成一样。

这完全取决于您希望从Service获得的目标。

答案 1 :(得分:0)

如果您可以将IntentService用于您的应用,则可以通过Intent将数据传递到服务。结果可以通过ResultReceiver

传回活动

答案 2 :(得分:0)

如果您将Service绑定到唯一的Activity,只要Activity未终止或service未绑定,您就会将其保持活动状态。只需将其绑定在onCreate()上,并在停止activity时将其解除绑定(无需执行任何操作)。

您可以在interface中创建一个在[{1}}中实施的监听器service,以便您可以将这些通知从Activity发送到Service {1}}。如果谷歌搜索,你会找到合适的例子和信息。

答案 3 :(得分:0)

  1. 是的,但如果我们使用startForeground()
  2. 则更为罕见
  3. 在所有活动都未绑定之前,服务通常不会停止。但是当最后一次,它会。因此,如果isFinishing()== true,如果你只在onPause中取消绑定,那么你可以防止服务在转到后台时死亡。
  4. 见3。
  5. 我个人喜欢在活动中设置一个处理程序,并从服务中发送消息。