2010-02-15 32 views
0
Intent helloservice = new Intent(this, HelloService.class); 
startService(helloservice); 
... 
stopService(helloservice); 

爲什麼不能工作?它只是繼續運行。我錯過了一些綁定什麼的?爲什麼我無法停止Android中的服務?

順便說一句,這是我的服務:

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; 
    } 
} 

回答

2

它不會停止你的服務。在你的服務中覆蓋onDestroy,你會看到它被調用。但是service!= timer,你必須手動停止你的計時器。

+0

那麼,我的計時器與我的服務完全不同?即使我停止服務...我的計時器運行?爲什麼? – TIMEX 2010-02-15 10:23:45

+0

我不知道爲什麼,但是如果從服務啓動10個線程並停止它,它們將繼續運行。 – 2010-02-15 10:29:15

+1

爲什麼?因爲就Android而言,您的計時器與您的服務無關。 – 2010-02-15 10:30:49

5

要使Timer在您的服務停止時消失,您需要撥打Timer上的cancel(),該服務採用相應的服務回調方法; onDestroy由它的外觀。

即使我停止我的服務......我的計時器運行?爲什麼?

因爲,就Android操作系統而言,Timer實例在邏輯上與任何特定服務無關。服務實現的責任是處理釋放垃圾回收器不會處理的任何資源。 (打開文件句柄和數據庫連接是我想象的其他例子。)