【问题标题】:Why can't I stop a service in Android?为什么我不能在 Android 中停止服务?
【发布时间】:2010-02-15 10:20:16
【问题描述】:
Intent helloservice = new Intent(this, HelloService.class);
startService(helloservice);
...
stopService(helloservice);

为什么这不起作用?它只是继续运行。我是否缺少一些绑定或什么?

顺便说一句,这是我的服务:

public class HelloService extends Service {
    private Timer timer = new Timer();
    private long INTERVAL = 1000;

    public void onCreate() {
        super.onCreate();
        startservice();
    }

    private void startservice() {
        timer.scheduleAtFixedRate( new TimerTask() {
            public void run() {
                Log.d("service", "This proves that my service works.");
            }
        }, 0, INTERVAL);
    ; }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}

【问题讨论】:

    标签: java android service debugging


    【解决方案1】:

    要让Timer在服务停止时消失,您需要在服务的相应回调方法中调用cancel()上的TimeronDestroy 看起来。

    即使我停止服务......我的计时器也会运行?为什么?

    因为,就 Android 操作系统而言,Timer 实例在逻辑上并没有与任何特定服务绑定。处理释放垃圾收集器不会处理的任何资源是服务实现的责任。 (打开文件句柄和数据库连接是我想象的其他示例。)

    【讨论】:

      【解决方案2】:

      它确实会停止您的服务。在你的服务中覆盖 onDestroy,你会看到它被调用了。但是 service != timer,你必须手动停止你的 timer。

      【讨论】:

      • 那么,我的计时器与我的服务完全不同?即使我停止服务......我的计时器也会运行?为什么?
      • 我不知道为什么,但是如果你从你的服务中启动 10 个线程并停止它,它们会继续运行。
      • 为什么?因为就 Android 而言,您的 Timer 与您的服务无关。
      • 我只是想说明斯蒂芬所说的话,它们没有任何联系。对您来说,这似乎是因为您从服务启动计时器,但事实并非如此。
      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多