Call onDestroy()的服务

问题描述 投票:4回答:3

我想打电话

onDestroy()

android中的服务方法。

我已经在互联网上搜索了很多,很多答案都像是

维修站停止,或者其onDestroy()永远不会调用。

但是我真的需要知道什么时候停止服务。

我的项目是关于音乐播放器的。

因此它使用服务,并且有正在进行的通知。我需要找出服务何时停止?并且需要停止音乐并删除通知。

但是它永远不会显示onDestroy()的任何日志。谁能帮我替代品吗?如果不是onDestroy(),那么哪种方法以及如何使用?

编辑:

我不想明确地呼叫onDestroy()。从运行的应用程序的设备菜单中删除我的应用程序时,我想删除通知。因为当我停止我的应用程序时,onDestroy()不会呼叫,并且我的通知仍保留在状态栏中。

我已使用此代码开始服务。

Intent playin = new Intent(this, MusicService.class);
startService(playin);
android android-service
3个回答
9
投票

Service类中,调用:

stopSelf();

来自另一个类,例如您的MainActivity

Intent i = new Intent(this, ServiceName.class); stopService(i);

两者都会停止您的服务。确保返回START_NOT_STICKY,以使服务不会再次启动。


2
投票

[当您要停止服务时,只需发出如下所示的停止服务的意图。

Intent intent = new Intent();
intent.setClass(getApplicationContext(), YourService.class);
stopService(intent);

这是强制停止服务。以这种方式停止服务时,可以确保由Android框架调用onDestroy方法。

希望这有助于解决您的问题。


2
投票

我想在android中调用onDestroy()Service方法。

  • 请勿直接调用此方法

public void onDestroy()

由系统调用以通知服务它不再被使用,并且正在被删除。该服务应清除其拥有的所有资源(线程,已注册的接收者等)。返回时,那里将不再有对该服务对象的调用,它实际上是死。不要直接调用此方法。

但是您可以检查该服务是否正在运行。

我需要找出服务何时停止?并且需要停止音乐和删除通知。

使用以下方式-

private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

然后使用-isMyServiceRunning(MyService.class)调用它。

参考:

1)Service onDestroy()

2)how-to-check-if-a-service-is-running-in-android

© www.soinside.com 2019 - 2024. All rights reserved.