Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: execute code in regular intervals

I need to perform some code in regular intervals (connect to a server and pull data from MySQL database every minute). For this purpose I have a Sync class:

public class Sync {      static private Handler handler = new Handler();     Runnable task;      public Sync(Runnable task, long time) {         this.task = task;         handler.removeCallbacks(task);         handler.postDelayed(task, time);     } } 

and in my Activity I have:

public void onCreate(Bundle savedInstanceState) {     ...     Sync sync = new Sync(call,60*1000);     ... }  final private Runnable call = new Runnable() {     public void run() {     //This is where my sync code will be, but for testing purposes I only have a Log statement     Log.v("test","this will run every minute");     } }; 

I have tried this with a shorter time period for testing, but It only runs once. When it Logs the message for the first time, its also the last. Does anyone see what Im doing erong here? Thanks!

like image 693
Tomáš 'Guns Blazing' Frček Avatar asked Apr 18 '12 10:04

Tomáš 'Guns Blazing' Frček


People also ask

How can you perform repeated tasks in a service in Android?

There are at least four ways to run periodic tasks: Handler - Execute a Runnable task on the UIThread after an optional delay. ScheduledThreadPoolExecutor - Execute periodic tasks with a background thread pool. AlarmManager - Execute any periodic task in the background as a service.

What is the difference between Android timer and a handler to do action every n seconds?

Handler is better than TimerTask . The Java TimerTask and the Android Handler both allow you to schedule delayed and repeated tasks on background threads. However, the literature overwhelmingly recommends using Handler over TimerTask in Android (see here, here, here, here, here, and here).

How do you call a function repeatedly after a fixed time interval in Java?

The setInterval() method calls a function at specified intervals (in milliseconds). The setInterval() method continues calling the function until clearInterval() is called, or the window is closed. 1 second = 1000 milliseconds.

What is Handler in Android example?

A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread and that thread's message queue.


2 Answers

You can do that using the below code, Hope it helps!

final Handler handler = new Handler();  Runnable runnable = new Runnable() {       @Override      public void run() {          try{             //do your code here         }         catch (Exception e) {             // TODO: handle exception         }         finally{             //also call the same runnable to call it at regular interval             handler.postDelayed(this, 1000);          }     }  };   //runnable must be execute once handler.post(runnable); 
like image 153
MKJParekh Avatar answered Sep 23 '22 16:09

MKJParekh


First you have to declare handler globally Second you have to use post Delay method again in runnable to trigger it again.

    @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         Sync sync = new Sync(call,60*1000);      }     final private Runnable call = new Runnable() {         public void run() {         //This is where my sync code will be, but for testing purposes I only have a Log statement         Log.v("test","this will run every minute");         handler.postDelayed(call,60*1000);         }     };     public final Handler handler = new Handler();     public class Sync {           Runnable task;          public Sync(Runnable task, long time) {             this.task = task;             handler.removeCallbacks(task);             handler.postDelayed(task, time);         }     }   } 
like image 43
Maneesh Avatar answered Sep 23 '22 16:09

Maneesh