我的要求:检测并响应电源事件。我有一个允许用户设置响应的活动。UI 进入后台后,应用程序必须保持响应(通过用户操作,即“主页”,或通过例如接听电话)。
我的分析:
- 使用接受 ACTION_POWER_DISCONNECTED(和 ..CONNECTED)的 BroadcastReceiver
- 我已经在活动中实现了接收器,它按预期工作。它继续在后台工作一段时间,但最终由于正常的android生命周期而停止工作,即。操作系统会破坏它。
- (建议)为了保持接收器运行,我遵循此建议并将其作为服务,使用
startForeground
. - (建议)因为它必须与 UI 交互,即通过接受对其设置的更改,它应该是一个绑定服务。
预期的问题:
根据文档,当所有客户端解除绑定时,绑定服务将停止。我只有一个客户端(UI),它将在其onDestroy
方法中解除绑定。这将在客户端被操作系统停止时调用,这最终会在正常的资源管理下发生。
当应用程序组件通过调用 bindService() 绑定到服务时,服务被“绑定”。绑定服务提供客户端-服务器接口,允许组件与服务交互、发送请求、获取结果,甚至通过进程间通信 (IPC) 跨进程执行此操作。绑定服务仅在另一个应用程序组件绑定到它时运行。多个组件可以一次绑定到服务,但是当所有组件都解除绑定时,服务将被销毁。
问题
- 这个分析正确吗?IE。作为正常操作系统管理的一部分,具有一个 UI 客户端的绑定服务最终会在客户端被销毁时被销毁吗?
- 如果是这样,我该怎么办?
- 任何其他提示请:)
作为一个假设被问到,因为设置绑定服务然后证明它按预期停止有相当多的工作。此外,即使它看起来有效,我也可能做错了。