Thanks for not giving up on me ;-)

I thought about that, but the log shows that I acquired the lock and then
nothing more happens.
Also I would need to use a Thread.join() in the onReceive Method to wait for
the thread to finish, which would lead to a long execution of the
onReceive() method.

If you think my arguments are wrong and still believe this is a valid
approach I can give it a shot. Otherwise I would rather wait a little bit
for other suggestions as this problem doesn't occur frequently (but often
enough to annoy the NewsRob users) enough to trigger it in a short period of
time and therefore I can basically just try one approach per day, actually
night ;-)

On Sun, Mar 1, 2009 at 6:35 PM, Marco Nelissen <marc...@android.com> wrote:

>
> One thing you might want to try is to grab the wakelock in the
> receiver itself, not in the thread. The way it is now, it's
> theoretically possible for the receiver to exit and the phone to go
> back to sleep before your threads ever gets a chance to run.
>
>
> On Sun, Mar 1, 2009 at 9:27 AM, Mariano Kamp <mariano.k...@gmail.com>
> wrote:
> > And btw. I should have mentioned that the 30 minutes sleep is a
> placeholder
> > for the real action. In my case that would be downloading stuff from the
> > net. But to show that it doesn't depend on the workload and make it more
> > abstract I just put a sleep in there.
> >
> > On Sun, Mar 1, 2009 at 6:20 PM, Mariano Kamp <mariano.k...@gmail.com>
> wrote:
> >>
> >> Marco,
> >>
> >>   thanks for taking the time to respond.
> >>
> >>   (a) If you look at the code ( http://pastie.org/403831) you'll see
> that
> >> it is in fact a custom log file (see class Persistent Log). The reason
> >> behind that is to be able to have a look at the problem over a longer
> period
> >> of time as it doesn't occur all the time. The default log seems to be a
> ring
> >> buffer holding just the log for a couple of minutes and is not of much
> help
> >> in this respect.
> >>
> >>   (b) The receiver is triggered by an alarm (see the full code) and
> spawns
> >> of a Thread immediately.
> >>         From the pastie code mentioned above:
> >>
> >>
> >>
> >> Intent i = new Intent(context, MyReceiver.class);
> >>
> >> PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
> >>
> >>
> >> AlarmManager alarmManager = (AlarmManager)
> >> getSystemService(ALARM_SERVICE);
> >>
> >> alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
> >> (System.currentTimeMillis() + 1000),
> >>
> >>                              60 * 60 * 1000, pi);
> >>
> >>
> >>
> >> Cheers,
> >> Mariano
> >>
> >> On Sun, Mar 1, 2009 at 6:13 PM, Marco Nelissen <marc...@android.com>
> >> wrote:
> >>>
> >>> It looks like the output you posted is from your custom log file, so
> >>> the first thing I'd do is to look at the system log to make sure that
> >>> the problem isn't in your custom logging code.
> >>> Also, doing anything lengthy in a broadcast receiver is a Bad Idea,
> >>> and keeping the device awake while you're doing it is a Really, Really
> >>> Bad Idea. If you need to do something every 30 minutes, you should
> >>> schedule an alarm, not sleep for 30 minutes with a wakelock held.
> >>>
> >>>
> >>>
> >>> On Sun, Mar 1, 2009 at 8:42 AM, Mariano Kamp <mariano.k...@gmail.com>
> >>> wrote:
> >>> > Hi,
> >>> >
> >>> >   I don't really know how to phrase my question as I don't know what
> >>> > the
> >>> > problem is. The symptom is that scheduled background activities are
> not
> >>> > completed and I want to know why that is and how I can further
> >>> > debug/solve
> >>> > it.
> >>> >
> >>> >   This is happening with NewsRob and the background synchronization
> >>> > that
> >>> > loads articles from Google Reader at a scheduled interval. To debug
> it
> >>> > I
> >>> > meanwhile created a synthetic sample that shows the behavior too. A
> >>> > Thread
> >>> > is started once an hour, acquires a partial wake lock, logs
> something,
> >>> > sleeps for 30 minutes and then releases the partial wake lock and
> logs
> >>> > again.
> >>> >
> >>> >
> >>> >   So it should look something like this:
> >>> > 28 04:02: onReceive
> >>> > 28 04:02: In aquire
> >>> > 28 04:32: After release
> >>> >
> >>> >   28 being the day of the month followed by the time and message.
> >>> >
> >>> >   Unfortunately it doesn't look like that all the time ;-)  (Blank
> >>> > Lines and
> >>> > <comment> added for readability).
> >>> >
> >>> > 28 05:02: onReceive
> >>> > 28 05:02: In aquire
> >>> > 28 05:32: After release
> >>> >
> >>> > 28 06:02: onReceive
> >>> > 28 06:02: In aquire
> >>> > <After release missing>
> >>> >
> >>> > 28 07:02: onReceive
> >>> > 28 07:02: In aquire
> >>> > <After release missing>
> >>> >
> >>> > 28 08:02: onReceive
> >>> > 28 08:02: In aquire
> >>> > <After release missing>
> >>> >
> >>> > 28 09:02: onReceive
> >>> > <In aquire missing>
> >>> > <After release missing>
> >>> > ....
> >>> >
> >>> >   So I suspect I do something wrong with the partial wake lock? But
> >>> > what?
> >>> > And even if that is the case what should happen then? Shouldn't it
> >>> > continue
> >>> > to run when a button on the device is pressed?
> >>> >
> >>> >   So here is the full sample code: http://pastie.org/403831
> >>> >
> >>> >   And here is the relevant method:
> >>> >
> >>> >     public void onReceive(final Context context, Intent intent) {
> >>> >         PersistentLog.log("onReceive", context);
> >>> >         new Thread(new Runnable(){
> >>> >
> >>> >             public void run() {
> >>> >                 PowerManager pm = (PowerManager)
> >>> > context.getSystemService(Context.POWER_SERVICE);
> >>> >                 PowerManager.WakeLock wl =
> >>> > pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SomeTag");
> >>> >                 wl.acquire();
> >>> >                 PersistentLog.log("In aquire", context);
> >>> >                 SystemClock.sleep(30 * 60 * 1000);
> >>> >                 wl.release();
> >>> >                 PersistentLog.log("After release", context);
> >>> >
> >>> >             }
> >>> >         }).start();
> >>> >     }
> >>> >
> >>> >   Any ideas?
> >>> >
> >>> > Cheers,
> >>> > Mariano
> >>> >
> >>> > ps. Yes, I've seen the typo. Thanks for not bringing it up ;)
> >>> >
> >>> >
> >>> > >
> >>> >
> >>>
> >>>
> >>
> >
> >
> > >
> >
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to