確定。讓我嘗試採取在這一個鏡頭..
讓我們創建一個BaseActivity
從Activity
擴展和所有Activities
應該從這個BaseActivity
延長...
Override
的onDestroy()
在BaseActivity
並在檢查,如果當前進程有任何更積極Task
或Activities
。如果它沒有任何更積極Task
或Activity
然後啓動Service
..
而且覆蓋在或onCreate()
,如果這是唯一的活動Task
和Activity
......如果是則停止你Service
下面的API可以用來檢查是否有更積極的檢查Task
和/或Activities
的應用:
要獲得的正在運行的任務列表:
ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks= activityManager.getRunningTasks(Integer.MAX_VALUE);
要檢查任務,如果從您的應用程序:
for (RunningTaskInfo task : tasks) {
if (getContext().getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) {
//check activity
}
}
NumActivities
的RunningTaskInfo
屬性可以用來檢查在Task
活動..
希望它可以幫助...
EDIT1:我喜歡@CommonsWare評論..也許你可以重新考慮你的方法..
「當我的應用程序退出時,我想啓動一項服務,當用戶重新啓動應用程序時,我想停止它」 - 忽略這一點並不特別實際的事實(用戶和操作系統有多種方式可以獲得擺脫你的服務),並且考慮到用戶在99%的時間內不在你的應用程序中,只是讓服務一直運行起來會不會更簡單? – CommonsWare
好點,這是一個可以考慮的選項 – gregm