1. 程式人生 > >Android判斷Service是否開啟

Android判斷Service是否開啟

最近改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() + "服務已經開啟");
            }
        }

結果: