最终是否会停止“前台”绑定服务,因为客户端将被停止?

时间:2012-12-18 04:20:37

标签: android broadcastreceiver android-activity android-service

我的要求:检测并响应电源事件。我有一个活动,允许用户设置响应。在UI进入后台后,应用程序必须保持响应(通过用户操作,即“主页”,或者通过例如接听电话)。

我的分析:

  1. 使用接受ACTION_POWER_DISCONNECTED(和..CONNECTED)的BroadcastReceiver
  2. 我在活动中实现了接收器,它按预期工作。它继续在后台运行一段时间,但最终因为正常的android生命周期而停止工作,即。操作系统会破坏它。
  3. (建议)为了让接收器保持运行,我按this recommendation并使用startForeground将其作为服务。
  4. (建议)因为它必须与用户界面互动,即通过接受对其设置的更改,它应该是bound service
  5. 预期的问题:

    根据文档,当所有客户端解除绑定时,绑定服务将停止。我只有一个客户端(UI),它将在onDestroy方法中取消绑定。当客户端被操作系统停止时,将调用此方法,最终将在正常的资源管理下进行。

      

    当应用程序组件通过调用bindService()绑定到它时,服务被“绑定”。绑定服务提供客户端 - 服务器接口,允许组件与服务交互,发送请求,获取结果,甚至跨进程间通信(IPC)进行交互。 绑定服务只有在绑定了另一个应用程序组件时才会运行。多个组件可以同时绑定到服务,但是当所有组件解除绑定时,服务都会被销毁。

    问题

    1. 这个分析是否正确?即。作为正常操作系统管理的一部分,当客户端被销毁时,带有一个UI客户端的绑定服务最终会被销毁吗?
    2. 如果是这样,我该怎么办呢?
    3. 请提供其他任何提示:)
    4. 被问为一个假设,因为有很多工作设置绑定服务,然后证明它按预期停止。而且,即使它似乎工作,我可能会做错了。

1 个答案:

答案 0 :(得分:1)

为什么不在清单中注册广播接收器?当广播功率意图时,它将自动启动和调用。那么你不必担心任何类型的“保持活跃”处理(除非你需要做更长的处理,否则你不需要服务)