判断服务是否为 运行 的正确方法
The correct way to determine if service is running
我在我的应用程序中 运行 前台服务,我需要确定它们是否在我的 activity 中 运行。
根据我的搜索,我发现这是一个选项:
private fun isMyServiceRunning(serviceClass: Class<*>): Boolean {
val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
for (service in manager.getRunningServices(Int.MAX_VALUE)) {
if (serviceClass.name == service.service.className) {
return true
}
}
return false
}
但是:
getRunningServices(Int):已弃用。
所以我正在使用 3 种方法中的一种。
- 使用 onResume 将服务绑定到 activity。但是我认为仅仅检查服务是否 运行.
对于一些小的东西来说有点矫枉过正
- 创建 Intent public 并检查其是否为空,但在某些情况下 Intent 不为空但服务不为 运行
- 检查前台服务持久通知是否处于活动状态,但这是解决方法。
检查服务是否 运行 最正确的方法是什么?
当时没有其他方法可以找到哪些服务是 运行。
但是您可以使用这种方式来查找您的服务是否 运行:
// Singleton class
public class SingletonServiceManager {
public static boolean isMyServiceRunning = false;
}
// Some other class
if(SingletonServiceManager.isMyServiceRunning == true){
// do something (btw, you don't need the == true portion)
}
在服务本身中创建一个静态布尔值。
在 onCreate 中使其为真;
在 onDestroy() 中将其设置为 false;
public class ActivityService extends Service {
public static boolean IS_ACTIVITY_RUNNING = false;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
IS_ACTIVITY_RUNNING = true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(!IS_ACTIVITY_RUNNING)
stopSelf();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
IS_ACTIVITY_RUNNING = false;
}}
现在,您可以通过布尔值 ActivityService.IS_ACTIVITY_RUNNING
检查您的活动是否 运行
您可以在 Service
的 onCreate
方法中创建一个 SharedPreferences
并在其中附加一些布尔值。
getSharedPreferences( getString( R.string.app_name ) , Context.MODE_PRIVATE )
.edit()
.putBoolean( getString( R.string.service_running_status_key ) , true )
.apply()
同样,在onDestroy
方法中,将false
附加到同一个键。然后,您可以使用 SharedPreferences.getBoolean
检查前景中的 Service
是否为 运行。
我在我的应用程序中 运行 前台服务,我需要确定它们是否在我的 activity 中 运行。 根据我的搜索,我发现这是一个选项:
private fun isMyServiceRunning(serviceClass: Class<*>): Boolean {
val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
for (service in manager.getRunningServices(Int.MAX_VALUE)) {
if (serviceClass.name == service.service.className) {
return true
}
}
return false
}
但是:
getRunningServices(Int):已弃用。
所以我正在使用 3 种方法中的一种。
- 使用 onResume 将服务绑定到 activity。但是我认为仅仅检查服务是否 运行. 对于一些小的东西来说有点矫枉过正
- 创建 Intent public 并检查其是否为空,但在某些情况下 Intent 不为空但服务不为 运行
- 检查前台服务持久通知是否处于活动状态,但这是解决方法。
检查服务是否 运行 最正确的方法是什么?
当时没有其他方法可以找到哪些服务是 运行。 但是您可以使用这种方式来查找您的服务是否 运行:
// Singleton class
public class SingletonServiceManager {
public static boolean isMyServiceRunning = false;
}
// Some other class
if(SingletonServiceManager.isMyServiceRunning == true){
// do something (btw, you don't need the == true portion)
}
在服务本身中创建一个静态布尔值。 在 onCreate 中使其为真; 在 onDestroy() 中将其设置为 false;
public class ActivityService extends Service {
public static boolean IS_ACTIVITY_RUNNING = false;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
IS_ACTIVITY_RUNNING = true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(!IS_ACTIVITY_RUNNING)
stopSelf();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
IS_ACTIVITY_RUNNING = false;
}}
现在,您可以通过布尔值 ActivityService.IS_ACTIVITY_RUNNING
检查您的活动是否 运行您可以在 Service
的 onCreate
方法中创建一个 SharedPreferences
并在其中附加一些布尔值。
getSharedPreferences( getString( R.string.app_name ) , Context.MODE_PRIVATE )
.edit()
.putBoolean( getString( R.string.service_running_status_key ) , true )
.apply()
同样,在onDestroy
方法中,将false
附加到同一个键。然后,您可以使用 SharedPreferences.getBoolean
检查前景中的 Service
是否为 运行。