2011-10-11 26 views
0

我寫了一個函數在服務時,服務啓動。我的服務類是如下功能寫在servcie運行,即使服務被你摧毀

public class SimpleService extends Service { 
    public static final String TAG = "Service"; 
    private Timer timer = new Timer(); 
    @Override 

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

    @Override 

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

      Toast.makeText(this,"Service created ...", Toast.LENGTH_LONG).show();   
      Log.i(getClass().getSimpleName(), "Service started.");   
      startService() ; 
    } 

    @Override 
    public void onDestroy() { 
      super.onDestroy(); 

      Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show(); 
    } 

    private void startService() {     
     timer.scheduleAtFixedRate(new mainTask(), 0, 200000); 
    }  

    private class mainTask extends TimerTask {   
     public void run() {   
      for (int i = 0; i <300; i++) { 
       String count= String.valueOf(i); 
       Log.d(TAG, count); 
      } 
     } 
    } 

    protected Intent launchmain_menu() { 
      Intent i = new Intent(this, SimpleService.class); 
      return i; 
    } 

} 

我在主要活動開始了我的服務上正在執行創建mentod如下 startService(new Intent(this,SimpleService.class));

此外,我已經寫在按鈕單擊以銷燬服務如下 stopService(launchmain_menu());

protected Intent launchmain_menu() { 
    Intent i = new Intent(this, SimpleService.class); 
    return i; 
} 

的問題是,即使我摧毀服務環路在啓動服務功能

即..

for (int i = 0; i <300; i++) { 
       String count= String.valueOf(i); 
       Log.d(TAG, count); 
} 

得到executed.I必須在emulitor檢查正在運行的服務但服務啓動我的我不在那裏後,我點擊按鈕來銷燬服務。如果循環得到執行,即使服務被摧毀。

任何人在查看此代碼後都會幫助我。

+0

您的代碼似乎似乎您的服務沒有停止。 – user370305

回答

0

循環得到執行,因爲它在不同的線程上執行,使用您創建的Timer。正如我在Timer android documentation中讀到的那樣,Timer任務一旦啓動就不能停止,所以你必須在它的預定時間之前取消它,等到任務完成或者以不同的方式完成。

+0

謝謝你的評論,你是對的。當我取消計時器時,它停止了。 –

0

您需要自行釋放服務中的所有資源,聽衆等,因爲android不會爲您執行此操作。請使用onDestroy()方法來釋放所有資源。請參閱doc