在我的應用程序中,我有一個粘性服務,它通過我的應用程序子類的onCreate()中的startService()來啓動。然後我綁定到該服務以與其交互。在這裏似乎都很好:我可以退出應用程序(完成())或者我可以按Home鍵,當我回到應用程序時,我仍然可以重新連接到在後臺運行的相同服務。啓動/限制服務生命週期。爲什麼重新創建
但有一個用例讓我困惑。如果我按Home鍵,然後啓動一些其他應用程序,觀看YouTube等,一段時間後,我可以在日誌中看到我的應用程序被重新創建(onCreate()被稱爲),這很好。但是,當我嘗試綁定到相同的服務時,它也被重新創建(構造函數被調用),並且我得到一個新實例,儘管我正在檢查並且我確定我的舊服務仍在運行。這打破了用例,因爲我需要正在運行的服務中正在處理的數據。
是不是bindService()應該綁定到現有的服務,只有在它沒有運行時才創建它?爲什麼會導致創建新實例?一般來說,這個用例的流程在哪裏描述(應用程序在後臺被重新創建)?
P.S.另一個奇怪的是,舊服務的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;
}
我剛剛查找了'stopWithTask',並且[文檔](https://developer.android.com/reference/android/R.attr.html#stopWithTask)說默認值是'false',所以設置它可能是不需要的。 – Sam
我剛剛查找'singleUser',[文檔](https://source.android.com/devices/tech/admin/multiuser-apps)說''只有系統應用程序當前可以使用此功能.'。不過,我自己並沒有嘗試過,所以我可能是錯的。 – Sam