Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-getRunningservices(ActivityManager)已弃用_Java_Android - Fatal编程技术网

Java Android-getRunningservices(ActivityManager)已弃用

Java Android-getRunningservices(ActivityManager)已弃用,java,android,Java,Android,我想知道MyService.java是否正常工作 我创建此方法: 私有布尔值isServiceAlive(类serviceClass){ ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务); 对于(ActivityManager.RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){ if(serviceClass.getName()

我想知道
MyService.java
是否正常工作

我创建此方法:
私有布尔值isServiceAlive(类serviceClass){
ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
对于(ActivityManager.RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){
if(serviceClass.getName().equals(service.service.getClassName())){
返回true;
}
}
返回false;
}

它工作正常,但API 26不推荐使用
manager.getRunningServices()
。那么,我们有没有另一个好的解决方案(方法)来获取当前正在运行的服务列表?

尽管它不能回答您的问题,但我认为您仍然可以将此方法用于您自己的服务:

为了向后兼容,它仍然会返回调用方自己的服务


如果您只想删除弃用警告,请使用
@SuppressWarnings(“弃用”)

下面是您要做的。如果您正在使用的服务在您自己的应用程序中,只需创建一个单例,其中包含一个用于启动或停止的布尔变量。服务启动时,请确保更新该变量

public class SingletonServiceManager {

    public static boolean isMyServiceRunning = false;

}
以上就是我在一个小的单例类中使用的全部内容,稍后,在另一个类中,您想知道服务是否正在运行

if(SingletonServiceManager.isMyServiceRunning == true){
    // do something
}

您只需管理更新此值的位置和时间。例如,在启动服务(在服务内部)时将其设置为true。然后,在停止服务时(从服务内部)将布尔值更新为false

欢迎使用Android O

安卓Oreo的另一个恼人的缺陷是,只有不推荐使用的注释,没有其他方法可以做到这一点。但也许在过去,android开发者决定创建替代功能

现在,如前所述,继续使用函数上面的
getRunningServices
@SuppressWarnings(“弃用”)
来消除警告

自Build.VERSION_CODES.O起,此方法不再适用于第三方应用程序为了向后兼容,它仍将返回呼叫方自己的服务。


似乎您不需要任何
isServiceAlive()
method@pskink为什么,我需要它只是在我的代码中,这个方法有一行下划线,我是一个完美主义者,想要删除这个线条。增益:你不需要任何方法来检查服务是否启动,你需要它做什么?所以你的服务有问题,不在您的活动中,请参阅,
我们故意没有API来检查服务是否正在运行,因为几乎毫无疑问,当您想要做类似的事情时,您的代码中会出现竞争条件。
-这是android开发团队成员之一所做的said@MakhanovMadiyar做一个完美主义者不是重点。此函数在下一次更新后可能不起作用-因此最好为API>=26和API<26创建一个解决方案。这如何回答问题?这是一个创可贴,而不是一个解决方案。@ Fox NoUT似乎是应用程序和OP中的服务的一个工作解决方案,它想检查服务是否在他自己的应用程序中运行,因此它应该回答他的问题。如果服务在不同的进程中运行(即加载该单实例类的多个实例),那么它可能不起作用,看到了吗?如果服务被终止怎么办?尽管服务不再运行,但布尔值仍将保持为true。您可以在服务的onCreate中将其设置为true,然后在onDestroy中将其设置为false。通过这种方式,您可以轻松跟踪正在运行的服务。
if(SingletonServiceManager.isMyServiceRunning == true){
    // do something
}