That's a good idea. I will try that.

On Thu, Feb 19, 2009 at 9:10 PM, Dianne Hackborn <hack...@android.com>wrote:

> Um yeah if you put a sleep and there are no other thread to run, you will
> reduce CPU usage.  This isn't really that useful a thing though.  It just
> means you are going to make your code run more slowly, for possibly no good
> reason.  When you lower the priority of your thread, it allows the kernel to
> keep it running, unless there are higher priority threads that should run in
> preference over it.
>
> Here's something you should try: just create a thread sitting there in an
> infinite loop with a lower priority.  How does it impact your UI?  I would
> guess that it won't.  If that is the case, then there is something else your
> actual background thread is doing that is causing the problem.
>
>
> On Thu, Feb 19, 2009 at 11:59 AM, Mariano Kamp <mariano.k...@gmail.com>wrote:
>
>> Also changing the prio to 
>> THREAD_PRIORITY_LOWEST<http://developer.android.com/reference/android/os/Process.html#THREAD_PRIORITY_LOWEST>didn't
>>  help things either.
>>
>> During the part where I use an XML pull parser to get through the input
>> document I added SystemClock.sleep(20) when getting a START_TAG event.
>>
>> I attached  screenshots for the version without the sleep (0ms.png, a
>> little bit of a misnomer as there was no sleep at all, not even 0 ms) and
>> 20ms.png for the above mentioned sleep. They both did kind of the same work
>> (ignore the MB), but the 0ms was much faster, but the CPU was pretty much at
>> the limit during that time. The 20ms version ran longer, but kept the CPU
>> below 50%.
>>
>> 2009/2/19 Mariano Kamp <mariano.k...@gmail.com>
>>
>> I can see that. I just don't know how to proceed from here. I don't wont
>>> to water down the problem description with lots of details of my app, but as
>>> it is not a problem I know how to describe on an abstract level I will still
>>> try do that in the briefest form I see fit.
>>>
>>> Maybe my "measurement" is wrong. I have a list row that represents an
>>> article from Google Reader. If I swipe over it from left to right, it is
>>> marked as read. As, depending on the system's load, this might take a moment
>>> I change the background of the list row to a shade of yellow to give a
>>> visual indication that the gesture is recognized, then go to the sqlite3
>>> database change the state of the article to read and fire a model updated
>>> event that triggers a notifyDataSetChanged() on the List Adapter. That will
>>> at some point call BaseAdapter.getView() ... In that method I then display
>>> the changed representation (article title is not bold anymore then) and
>>> reset the background color of the list row to the default again. So for the
>>> duration of the foreground activity (updating the article and reflecting
>>> that on the UI, see before) the background is yellow.
>>>
>>> Ok, now the guesstimeasurement I do is that I look at the time the
>>> background is yellow. This time is very brief, when the background thread is
>>> not running and went to 4 seconds when the background thread is running and
>>> half of that when the background thread is running with the background prio.
>>>
>>> Maybe that is already what can be achieved? I was expecting that the
>>> foreground activity (the db update etc.) with a running background activity
>>> would be almost as fast as without a background activity when using the low
>>> prio.
>>>
>>> 2009/2/19 Dianne Hackborn <hack...@android.com>
>>>
>>> I am surprised by that.  Note that all of the stuff we do in the
>>>> background on the system (synchronizing data and updating databases and
>>>> such) is just done with normal threads, running at background priority,
>>>> doing nothing fancy, and this has little impact on the UI.  You really
>>>> shouldn't have to play fancy games to get the kernel's scheduler to run one
>>>> thread over another; that's exactly what the scheduler and its thread
>>>> priorities are for.
>>>>
>>>>
>>>> On Wed, Feb 18, 2009 at 12:15 PM, Mariano Kamp 
>>>> <mariano.k...@gmail.com>wrote:
>>>>
>>>>> Thanks for the quick answer.
>>>>>
>>>>> That helped, a lot. Not quite fantastic yet though.
>>>>>
>>>>> No background activity: < 300ms (gesture starts something, until
>>>>> something ends)
>>>>> With background activity, before 3500ms
>>>>> With background activity, after 1500ms
>>>>> (All numbers are just guesstimeasured for illustration purposes...)
>>>>>
>>>>> Anything else I can do? ;-)
>>>>>
>>>>>
>>>>> 2009/2/18 Romain Guy <romain...@google.com>
>>>>>
>>>>>
>>>>>> The proper way to set your thread priority is to execute the following
>>>>>> line *in run() method of the thread*:
>>>>>>
>>>>>> Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)
>>>>>>
>>>>>> On Wed, Feb 18, 2009 at 11:32 AM, Mariano Kamp <
>>>>>> mariano.k...@gmail.com> wrote:
>>>>>> > Hi,
>>>>>> >
>>>>>> >   I wrote an app that acts as a Google Reader client. It downloads
>>>>>> an XML
>>>>>> > from Google, parses it and afterward analyzes web pages with regular
>>>>>> > expressions to find image and stylesheet tags to make the pages
>>>>>> available
>>>>>> > offline.
>>>>>> >
>>>>>> >   So far so good. The problem is the above mentioned tasks are
>>>>>> pretty CPU
>>>>>> > intensive and I also use gesture to mark items as read etc. The
>>>>>> gesture
>>>>>> > detection gets really bad when done during the synchronization phase
>>>>>> (see
>>>>>> > above).
>>>>>> >
>>>>>> >   Those tasks from the synchronization phase are not time critical.
>>>>>> I would
>>>>>> > like to tell the OS that the UI thread is far more important than my
>>>>>> > background thread. I just don't know how to do that efficiently.
>>>>>> >
>>>>>> >  In an ideal world the OS would take care of that for me, so I
>>>>>> started out
>>>>>> > with "Thread.currentThread().setPriority(Thread.MIN_PRIORITY);".
>>>>>> That didn't
>>>>>> > have any obvious effect. Then I sprinkled "Thread.yield()" in all
>>>>>> major
>>>>>> > areas, in particular in the loops. But that also didn't seem to have
>>>>>> much of
>>>>>> > an effect. Before I know start to to all kind of silly stuff, I'd
>>>>>> like to
>>>>>> > pick your brains on how this is done properly?
>>>>>> >
>>>>>> >  I am absolutely willing to use Thread.sleep(20) in some of the
>>>>>> places I use
>>>>>> > Thread.yield. A little bit of a pause might be a good thing for the
>>>>>> battery
>>>>>> > heat and power consumption, but I can't let the pause get really
>>>>>> long, e.g.
>>>>>> > 250ms, because I wouldn't get any work done and would keep the phone
>>>>>> awake
>>>>>> > unnecessarily (I am holding a partial wake lock). On the other hand
>>>>>> I am not
>>>>>> > sure if a small pause now and then, like a 20ms pause, then 50ms
>>>>>> work, won't
>>>>>> > take too much a toll on the CPU for switching tasks and in the end
>>>>>> burn the
>>>>>> > battery too fast.
>>>>>> > Also, what seems like a good pause for the G1 might be not so much
>>>>>> of a good
>>>>>> > idea on different hardware, like a Netbook.
>>>>>> >
>>>>>> >   I could try to set the Priority of the UI thread to MAX_PRIORITY,
>>>>>> but as I
>>>>>> > didn't start the thread, I feel that it's not my business to change
>>>>>> its
>>>>>> > priority.
>>>>>> >
>>>>>> >   I could check if the screen is off. If that is the case high
>>>>>> resolution
>>>>>> > touch events are not so likely so I could revert all the measurement
>>>>>> from
>>>>>> > above until the screen comes on again.
>>>>>> >
>>>>>> >   So what do you think? I guess I am not the only one with the
>>>>>> problem, or
>>>>>> > am I?
>>>>>> >
>>>>>> > Cheers,
>>>>>> > Mariano
>>>>>> >
>>>>>> > >
>>>>>> >
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Romain Guy
>>>>>> Android framework engineer
>>>>>> romain...@android.com
>>>>>>
>>>>>> Note: please don't send private questions to me, as I don't have time
>>>>>> to provide private support.  All such questions should be posted on
>>>>>> public forums, where I and others can see and answer them
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Dianne Hackborn
>>>> Android framework engineer
>>>> hack...@android.com
>>>>
>>>>
>>>> Note: please don't send private questions to me, as I don't have time to
>>>> provide private support.  All such questions should be posted on public
>>>> forums, where I and others can see and answer them.
>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>>
>
>
> --
> Dianne Hackborn
> Android framework engineer
> hack...@android.com
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support.  All such questions should be posted on public
> forums, where I and others can see and answer them.
>
>
> >
>

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