【问题标题】:I can't stop a simple service我无法停止一项简单的服务
【发布时间】:2019-12-02 16:02:08
【问题描述】:

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

我有一个简单的服务,我在某个时间从一个活动中调用它。此服务每三秒执行一次操作。 该服务运行良好,但在阅读了很多关于该主题并尝试了我找到的所有解决方案之后,我无法销毁该服务并停止它。 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】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2015-12-17
      相关资源
      最近更新 更多