Android 服务绑定失败,除非应用程序在后台打开(一加 5)

Android service binding fails unless app is open in background (One Plus 5)

我有 2 个独立的应用程序 A 和 B。

应用程序 B 内部有一项服务,并且在某一时刻,应用程序 A 通过绑定到 B 的服务并交换一些消息(使用 Messenger)与应用程序 B 通信。

在几乎所有设备上,此过程都完全正常。但是,在 OnePlus 5 设备上,每当 A 尝试绑定 B 的服务时,它总是会失败 除非 B 已打开并处于后台。如果您从任务抽屉中滑动 B(杀死它),服务绑定将再次失败。

当我说服务绑定失败时,我的意思是 context.bindService() returns 错误。到目前为止,我只在 OnePlus 5 设备上注意到这种行为。

这是否表明 OnePlus 5 设备本身存在问题?或者是否有其他原因可能导致此问题。

如果有帮助,我就是这样绑定到服务的:

Intent intent = new Intent();
intent.setComponent(new ComponentName(packageNameOfB, classNameOfBService));
MyServiceConnection connection = new MyServiceConnection();
context.bindService(intent, connection, Context.BIND_AUTO_CREATE);

此行为是由 OnePlus 设备中的电池优化功能引起的。这可以通过禁用此功能来解决。该功能存在于 "Settings -> Battery -> Battery Optimization -> Advanced Optimization in overflow menu (three dots menu) -> Disable Advanced Optimization" 中。这将解决问题。