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
-~----------~----~----~----~------~----~------~--~---

Reply via email to