最近改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() + "服务已经开启");
}
}
结果: