In M5 the alarm manager could only send a broadcast, so you will need to have a receiver for that (could be the same one, checking the Intent action) which then starts the service. In a future SDK you will be able to directly start a service.
Also I would highly recommend going through the ApiDemos -- there are examples of services, alarms, and using the two together. On Jul 13, 2:07 pm, "Jaikishan Jalan" <[EMAIL PROTECTED]> wrote: > So, is this the correct way ? > > // My intent receiver which will listen for BOOT_COMPLETED Signal > public class AddressLogIntent extends IntentReceiver{ > static final String ACTION = "android.intent.action.BOOT_COMPLETED"; > [EMAIL PROTECTED] > public void onReceiveIntent(Context context, Intent intent) { > if (intent.getAction().equals(ACTION)) > { > Intent AddressIntent = new > Intent(AddressLogIntent.this,AddressLogService.class); > // We want the alarm to go off 15 seconds from now. > long firstTime = SystemClock.elapsedRealtime(); > > // Schedule the alarm! > AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); > am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, > 15*1000, intent); > } > } > > } > > public class AddressLogService extends Service > { > @Override > protected void onCreate() > { > //Simply do my processing > } > > } > > Is this the correct way to invoke a background process that runs after every > 15 seconds after the BOOT event is completed? I created an intentreceiver > for the BOOT event and then create an Alarm Manager and schedule it after > every 15 seconds. This alarm manager will call a service that will do my > processing. I expect this alarm to run infinitely until the emulator is > closed. > > Thanks, > Jaikishan > > -----Original Message----- > From: android-developers@googlegroups.com > > [mailto:[EMAIL PROTECTED] On Behalf Of hackbod > Sent: Sunday, July 13, 2008 12:06 PM > To: Android Developers > Subject: [android-developers] Re: Running Background Process > > Yeah it is almost certainly due to the process being killed to reclaim > memory. In the situation where you just have a receiver that starts a > thread, the process will be run as a foreground process (oom_adj=0) > for the time it is in onReceiveIntent(), but upon returning from that > the system does not consider there to be any active objects running in > the process so it is lowered to an empty process (oom_adj=15). > > Empty processes are killed very aggressively by the system's memory > management, so it is very likely for your process to be killed as > other things go on during boot. If you look at the logcat output, you > will probably see lines in the log about your process starting, and > then later dying. You can also use the command "adb dumpsys activity" > to see the current state of the activities and application processes > being managed by the system; this includes the current oom_adj values > for each process. > > Fwiw, a lot of memory optimization work has been done since M5 so in > future SDKs it is less likely for your process to be killed when > empty... but leaving it in the state where the system thinks it is > empty but you still have stuff you want running in it is a bug, and > will cause problems sooner or later. > > On Jul 13, 11:13 am, JBQ <[EMAIL PROTECTED]> wrote: > > For a 30-minute interval, I'd recommend an alarm manager. It'll save > > some RAM that'll make the device more responsive for foreground > > applications, and it'll save you some bookkeeping (tracking a 30- > > minute interval through your service getting killed and restarted > > isn't as easy as it seems). > > > As for the apparently random behavior, I don't actually know for sure. > > My guess is that the system is running under enough memory pressure > > (which is common during boot as there are many things going on) to > > cause apparently inactive processes to get killed so quickly that your > > thread never gets a chance to run at all. > > > JBQ > > > On Jul 13, 10:43 am, "Jaikishan Jalan" <[EMAIL PROTECTED]> wrote: > > > > Thanks Mark and JBQ for your reply. Ok, ideally when the application > will be > > > released, my application will make a network request after every 30 > minutes. > > > So what do you recommend? - Service or Alarm Manager? My second question > is > > > why the random behavior? Is there any reason behind why the thread > sometime > > > runs and sometime it does not. > > > > -Jaikishan > > > > -----Original Message----- > > > From: android-developers@googlegroups.com > > > > [mailto:[EMAIL PROTECTED] On Behalf Of JBQ > > > Sent: Sunday, July 13, 2008 10:39 AM > > > To: Android Developers > > > Subject: [android-developers] Re: Running Background Process > > > > First, I'm not entirely sure what you're trying to achieve, but making > > > your code wake up every 15 seconds might cost your users a lot of > > > battery life for little result, when the user isn't actively using the > > > device. If you do some network activity every 15 seconds over a cell > > > network, you'll only have a few hours of battery life. > > > > You really have two options here: > > > > -if you really want to have a process stick around, you need to have a > > > Service in that process, so that the system can make the appropriate > > > decisions when it tries to make space for other applications. When the > > > process that hosts your service is killed, it'll eventually get > > > restarted automatically, so you can restart whatever you were doing in > > > the service's onCreate function. In that case, you'll find that using > > > a Handler is a much better idea than using Thread.sleep. > > > > -if you can work without necessarily having a process stay up all the > > > time, you should look at the AlarmManager, which will allow the system > > > to free the memory associated with your process between ticks. > > > > JBQ > > > > On Jul 13, 7:50 am, "Jaikishan Jalan" <[EMAIL PROTECTED]> wrote: > > > > Hello, > > > > > I have written an intentreceiver which gets launched when the boot has > > > > completed. In this, I run a thread in the background process which do > > > > certain task periodically. Here is my piece of code: > > > > > public class AddressLogService extends IntentReceiver{ > > > > /* the intent source*/ > > > > static final String ACTION = > > > > "android.intent.action.BOOT_COMPLETED"; > > > > @Override > > > > public void onReceiveIntent(Context context, Intent intent) { > > > > if (intent.getAction().equals(ACTION)) > > > > { > > > > NewRunnable AddressLog = new NewRunnable(context); > > > > Thread tr = new Thread(null,AddressLog,"Address Logger"); > > > > tr.start(); > > > > } > > > > } > > > > > private class NewRunnable implements Runnable { > > > > private Context context; > > > > // Initializing the Runnable Class > > > > public NewRunnable(Context c){ > > > > context = c; > > > > } > > > > public void run(){ > > > > while(true){ > > > > isServerUp = true; > > > > if(isServerUp ){ > > > > // Do some processing > > > > Thread.sleep(15 * 1000); > > > > } > > > > }catch(Exception e){} > > > > } > > > > } > > > > } > > > > > } > > > > > I have included the required receiver details and permission in > > > > AndroidManifest.xml > > > > The problem is when I launch my emulator, this thread sometimes run > and > > > > sometime it does not run. I have to try launching the emulator certain > > > times > > > > before I get this thread running. I check this by checking the server > log. > > > I > > > > am not sure why this is happening. Can any point me out why this is > > > > happening? Or is anyone can suggest there is any other better way to > > > > approach this task. > > > > > Thanks, > > > > Jaikishan --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] Announcing the new M5 SDK! http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---