Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to kill a TimerTask created from an IntentService with a button
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload