Start Android Service after every 5 minutes Start Android Service after every 5 minutes android android

Start Android Service after every 5 minutes


You do not want to use a TimerTask since this depends on your application running continuously. An AlarmManager implementation makes it safe for your application to be killed between executions.

Stating that you tried to use AlarmManager but did not get the desired result is not a helpful statement, in that it tells no one how to help you to get it right. It would be much more useful to express what happened.

http://web.archive.org/web/20170713001201/http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/ contains what appears to be a useful tutorial on AlarmManager. Here are the salient points:

1) Your alarm will cause an Intent to fire when it expires. It's up to you to decide what kind of Intent and how it should be implemented. The link I provided has a complete example based on a BroadcastReceiver.

2) You can install your alarm with an example such as:

public void setOnetimeTimer(Context context) {    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);    Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);    intent.putExtra(ONE_TIME, Boolean.TRUE);    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 5), pi);}


Below I have provided three files, MainActivity.java for start service, Second file MyService.java providing service for 5 Minute and Third is manifest file.

MainActivity.java

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        startService(new Intent(this, MyService.class)); //start service which is MyService.java    }}

MyService.java

 public class MyService extends Service {    public static final int notify = 300000;  //interval between two services(Here Service run every 5 Minute)    private Handler mHandler = new Handler();   //run on another Thread to avoid crash    private Timer mTimer = null;    //timer handling    @Override    public IBinder onBind(Intent intent) {        throw new UnsupportedOperationException("Not yet implemented");    }    @Override    public void onCreate() {        if (mTimer != null) // Cancel if already existed            mTimer.cancel();        else            mTimer = new Timer();   //recreate new        mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);   //Schedule task    }    @Override    public void onDestroy() {        super.onDestroy();        mTimer.cancel();    //For Cancel Timer        Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();    }    //class TimeDisplay for handling task    class TimeDisplay extends TimerTask {        @Override        public void run() {            // run on another thread            mHandler.post(new Runnable() {                @Override                public void run() {                    // display toast                    Toast.makeText(MyService.this, "Service is running", Toast.LENGTH_SHORT).show();                }            });        }    }}

AndroidManifest.xml

  <service android:name=".MyService" android:enabled="true" android:exported="true"></service>


Create a Timer object and give it a TimerTask that performs the code you'd like to perform.

Timer timer = new Timer ();TimerTask hourlyTask = new TimerTask () {    @Override    public void run () {        // your code here...    }};// schedule the task to run starting now and then every hour...timer.schedule (hourlyTask, 0l, 1000*60*60);   // 1000*10*60 every 10 minut

The advantage of using a Timer object is that it can handle multiple TimerTask objects, each with their own timing, delay, etc. You can also start and stop the timers as long as you hold on to the Timer object by declaring it as a class variable or something.