在我的应用程序中,我有一个粘性服务,它是通过我的 Application 子类的 onCreate() 中的 startService() 启动的。然后我绑定到该服务以与之交互。一切似乎都很好:我可以退出应用程序 (finish()) 或者我可以按 Home 键,当我回到应用程序时,我仍然可以重新连接到在后台运行的同一服务。
但是有一个用例让我感到困惑。如果我按 Home 键,然后启动其他一些应用程序,观看 YouTube 等,一段时间后我可以在日志中看到我的应用程序被重新创建(调用 onCreate()),这很好。但是,当我现在尝试绑定到同一个服务时,它也会重新创建(调用构造函数),并且我得到一个新实例,尽管我正在检查并且我确定我的旧服务仍在运行。这打破了用例,因为我需要在已经运行的服务中处理数据。
bindService() 不应该绑定到现有服务并且只在它没有运行时才创建它?为什么会导致创建新实例?一般来说,这个用例的流程在哪里描述(在后台重新创建应用程序)?
PS 另一个奇怪的是,旧服务的 onDestroy() 没有被调用。
这是我的应用程序类的一些代码,用于上下文:
@Override
public void onCreate(){
super.onCreate();
Intent intent = new Intent(getContext(), MyService.class);
if(!isMyServiceRunning()){
getContext().startService(intent);
}
getContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (MyService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}