我无法停止简单的服务

问题描述 投票:1回答:1

我知道已经问过这个问题,但是我发现的解决方案并不能解决问题,至少对我而言。

我有一项简单的服务,我会在某个时间致电某个活动。该服务每三秒钟执行一次操作。该服务运行良好,但是在阅读了很多有关该主题的内容并尝试了我发现的所有解决方案之后,我无法销毁并停止该服务。 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
                    }

                }

            });
        }
    }
}
android service destroy
1个回答
0
投票

如果“ Service onDestroy”打印到logcat,则您的Service实际上已经停止。这并不意味着您的Timer已停止。

Android框架无法知道哪些线程与您的Service关联,因此,在决定销毁Service时,它不会杀死任何特定线程。即使Service对象本身是GC'd,也是如此。 (尽管已实现,但您的myService对象将不会进行GC处理,因为通过Timer线程和该TimeDisplayTimerTask中的Timer有多个对其的引用。)

[您可能会在命令Timer停止几分钟后发现Service最终停止运行;这可能是因为Android完全终止了您的应用程序,以便为优先级更高的应用程序和/或“前景”应用程序释放资源。

为了改善这种情况,您应该在purge()中将Timer设置为onDestroy()

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