In this post, I will discuss design patterns for scheduling periodic jobs in an Android Native Applications. For illustration, i will be referring to sample code from my SMSPost project.
Let's start by discussing how to trigger a job at a predefined time? For many developers, Android Services becomes the default choice. However scheduling jobs through Services is not an optimal solution. Here is why
- Running a service in the background all the time is a resource drain
- There is a risk that Android may terminate the service in case of shortage in RAM (Refer to Android process and lifecycle)
Sample code for setting a Broadcast using AlarmManager
try { Long firstTime = SystemClock.elapsedRealtime(); Intent intent = new Intent(this, AlarmReceiver.class); intent.putExtra("alarm_message", "Alarm Scheduled!"); PendingIntent sender = PendingIntent.getBroadcast(this, Const.url_REQUEST_CODE, intent, 0); AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 60*1000, sender); // set your own frequency } catch (Exception e) { Log.e(Const.TAG, "ERROR IN CODE:"+e.toString()); }
Sample code for Receiving the Broadcast Notification
public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub try { // your code for scheduled job goes here } catch (Exception e) { Log.e(Const.TAG, "ERROR IN CODE:"+e.toString()); } }Up Next: We would explore design patterns further in specific cases where your scheduled job is expected to execute some heavy resource intensive operations
No comments:
Post a Comment