我不能停止一个简单的服务

I can't stop a simple service

我知道这个问题已经被问过了,但我找到的解决方案并没有解决问题,至少对我来说是这样。

我有一个简单的服务,我在特定时间从 activity 调用。该服务每三秒执行一次操作。 该服务运行良好,但在阅读了很多有关该主题的内容并尝试了我找到的所有解决方案之后,我无法破坏该服务并停止它。 onStartCommand 方法总是再次运行,我重新开始。

谁能告诉我必须在代码中进行哪些更改才能完全停止服务并销毁它?

我坚持,stopSelf(), stopService(), 等等...... 服务从来没有停止过

非常感谢,我留下我的代码:

public class myService extends Service {

  //...

    @Override
    public void onCreate() {

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        if (mTimer != null) {

        } else {
            mTimer = new Timer();
        }

        mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);

        return Service.START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent arg0) {

        return null;
    }

    @Override
    public void onDestroy() {

        Log.e(TAG,"Service onDestroy");

    }

    class TimeDisplayTimerTask extends TimerTask {

        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {

                @Override
                public void run() {

                    vuelta  = vuelta +1;

                    if (vuelta==2){

                        stopSelf();

                    } else {
                        // NA
                    }

                }

            });
        }
    }
}

如果"Service onDestroy"打印到logcat,那么你的Service确实已经停止了。这并不意味着您的 Timer 已经停止。

Android 框架无法知道哪些线程与您的 Service 关联,因此当它决定销毁您的 [=10] 时,它不会擅自杀死任何特定线程=].即使 Service 对象本身是 GC 也是如此。 (尽管如此,您的 myService 对象不会被 GC,因为通过 Timer 线程和 Timer 中的 TimeDisplayTimerTask 有多个对它的引用。 )

您可能会发现 Timer 最终会停止 运行,在您命令 Service 停止几分钟后;这可能是因为 Android 已完全终止您的应用程序,以便为更高优先级的应用程序释放资源,and/or "foreground" 应用程序。

要改善这种情况,您应该在 onDestroy()purge() 您的 Timer