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" 中。这将解决问题。
我有 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" 中。这将解决问题。