Android判斷Service是否開啟
阿新 • • 發佈:2019-02-13
最近改bug的時候,發現有個Service總是開啟,關閉,重複執行,於是對他做了點小的改動,判斷是否啟動,為真的話則不做任何事,為假,startService,下面奉上程式片段,給自己做個記錄,也方便下大家。
主要思路:通過ActivityManager來迴圈判斷Service是否存在。
必要條件:宣告許可權
<uses-permission android:name="android.permission.GET_TASKS"/>
判斷函式:
/** * 判斷服務是否開啟 * * @param mContext * 上下文 * @param className * className * @return true:開啟 false:未開啟 */ public static boolean isWorked(Context mContext, String className) { ActivityManager myManager = (ActivityManager) mContext .getApplicationContext().getSystemService( Context.ACTIVITY_SERVICE); ArrayList<ActivityManager.RunningServiceInfo> runningService = (ArrayList<ActivityManager.RunningServiceInfo>) myManager .getRunningServices(30); for (int i = 0; i < runningService.size(); i++) { if (runningService.get(i).service.getClassName().toString() .equals(className)) { return true; } } return false; }
使用例項
if (BuildConfig.DEBUG) { if (!Utility.isWorked(this, LogService.class.getPackage().getName() + "." + LogService.class.getSimpleName())) { Intent logIntent = new Intent(this, LogService.class); logIntent.setPackage(getPackageName()); stopService(logIntent); startService(logIntent); } else { Logger.(TAG).i(LogService.class.getSimpleName() + "服務已經開啟"); } }
結果: