title: How to kill a TimerTask created from an IntentService with a button
body: <p>I'm making a Cloud Service that uses a standard HTTP get to get commands. I use a service (extending class IntentService as opposed to Service) to keep things in sync. I have the checking going on in a TimerTask firing off every 3 seconds. The problem is that when the user goes back to the activity to turn it off if they want, they press a toggle button. How do I tell the TimerTask (or the IntentService running a timer task) to stop and start it?</p>
  
  <p>The service itself is getting destroyed after it handles the intent and creates the task, so would a Service be more appropriate for this than an IntentService? Even if thats the case, the question about stopping and starting the TimerTask remains.</p>
  
  <p>Here's the code to the intentservice:</p>
  
  <pre><code>import java.io.IOException;
  import java.util.Timer;
  import java.util.TimerTask;
  import org.apache.http.client.ClientProtocolException;
  import org.apache.http.client.ResponseHandler;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.impl.client.BasicResponseHandler;
  import org.apache.http.impl.client.DefaultHttpClient;
  import android.app.*;
  import android.content.Context;
  import android.content.Intent;
  import android.content.SharedPreferences;
  import android.os.Handler;
  import android.widget.*;
  
  public class syncservice extends IntentService {
  
    /** 
     * A constructor is required, and must call the super IntentService(String)
     * constructor with a name for the worker thread.
     */
      public syncservice() {
          super("syncservice");
      }
      public static final String PREFS_NAME = "prefcs";
    /**
     * The IntentService calls this method from the default worker thread with
     * the intent that started the service. When this method returns, IntentService
     * stops the service, as appropriate.
     */
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
      final String uid = intent.getExtras().get("uid").toString();
      final String dvname = intent.getExtras().get("dvname").toString();
      final long period = intent.getExtras().getLong("period");
      final Context ctx = getApplicationContext();
      final Toast toast = Toast.makeText(ctx,"An error occured with the service. It will automatically turn off.", 0);
      final Handler handler = new Handler();
      TimerTask timertask = new TimerTask () {
          @Override
          public void run() {
              SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
              if (settings.getBoolean("doservice", false)) {
                  String command = netread("url here");
                  //TODO Parse command from Pulling
                  if (command.contains("&lt;")) {
                      //TODO what to do if an error occurred (exceptions already caught
                      Runnable showerrormessage = new Runnable() {
                          public void run() {
                              toast.makeText(ctx,"new text",0);
                              toast.show();
                          }
                      };
                      handler.post(showerrormessage);
                  }
              }
          }
      };
      Timer timer = new Timer();
      timer.schedule(timertask,0,period);
      return super.onStartCommand(intent,flags,startId);
  }
  public void onDestroy() {
      Toast.makeText(getApplicationContext(), "The Service has died", Toast.LENGTH_SHORT).show();
      return;
  }
  
  @Override
  protected void onHandleIntent(Intent intent) {
      Toast.makeText(getApplicationContext(), "Intent Handled", 0).show();
  }
  public final String netread(String url) {
      try {
          DefaultHttpClient httpClient = new DefaultHttpClient();
          HttpGet httpGet = new HttpGet(url);
          ResponseHandler&lt;String&gt; resHandler = new BasicResponseHandler();
          String page = httpClient.execute(httpGet, resHandler);
          return page;
      } catch (ClientProtocolException e) {
          //Toast.makeText(getApplicationContext(),"Client Protocol Exception! Try again.",0).show();
          return "&lt;";
      } catch (IOException e) {
          //Toast.makeText(getApplicationContext(),"IO Exception! Make sure you are connected to the internet and try again.", 0).show();
          return "&lt;";
      }
  
  }
  }
  </code></pre>
  
  <p>Thanks a bunch for helping me out!</p>