Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我不能停止Android中的服务?_Java_Android_Service_Debugging - Fatal编程技术网

Java 为什么我不能停止Android中的服务?

Java 为什么我不能停止Android中的服务?,java,android,service,debugging,Java,Android,Service,Debugging,为什么这样不行?它一直在跑。我是不是错过了什么 顺便说一下,这是我的服务: Intent helloservice = new Intent(this, HelloService.class); startService(helloservice); ... stopService(helloservice); 它确实停止了你的服务。在服务中重写onDestroy,您将看到它被调用。但是服务!=计时器,您必须手动停止计时器。要在您的服务停止时使计时器消失,您需要在相应的服务回调方法中调用计时器

为什么这样不行?它一直在跑。我是不是错过了什么

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

Intent helloservice = new Intent(this, HelloService.class);
startService(helloservice);
...
stopService(helloservice);

它确实停止了你的服务。在服务中重写onDestroy,您将看到它被调用。但是服务!=计时器,您必须手动停止计时器。

要在您的服务停止时使计时器消失,您需要在相应的服务回调方法中调用计时器上的cancel;从外观上看,这是一件很有趣的事

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


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

那么,我的计时器与我的服务完全不同?即使我停止我的服务…我的计时器运行?为什么?我不知道为什么,但是如果你从你的服务中启动10个线程并停止它,它们会继续运行。为什么?因为就安卓而言,你的计时器与你的服务无关。我只是想说明斯蒂芬所说的,它们之间没有任何联系。对你来说,这似乎是因为你从服务启动计时器,但事实并非如此。
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;
    }
}