service start and ui hanging

by Bob » Fri, 13 Mar 2009 23:05:18 GMT


Sponsored Links
 Hi,
I have moved some intensive processing from my main thread to a
service.  My UI is hanging and then crashing when I start the service,
even if I put the service start in a new thread started via

 Thread updateThread = new Thread(null, backgroundRefresh2,
"new_thread");
                  updateThread.start();


What am I doing wrong?  Also, it seems like the cause of the eventual
crash in the service/worker thread doesn't show up in LogCat.

Thanks,
Bob

--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Streets Of Boston » Fri, 13 Mar 2009 23:32:20 GMT


 Hi Bob,

Your code snippet is not enough to give you some more info.
E.g. how does backgroundRefresh2 looks like (it public void run()
implementation).

Based on its name 'backgroundRefresh2': does it access View-s and
modify these view (e.g. update text-view, images, etc.)?
If so, that may explain your crash. You should not access any View (or
subclass of View) in any other thread than your main message-
dispatching thread (i.e. the thread on which your onCreate/onDestroy/
onPause/onResume/on<anything> is called).




--~--~---------~--~----~------------~-------~--~----~


Sponsored Links


service start and ui hanging

by Bob » Sat, 14 Mar 2009 00:39:22 GMT


 Thanks for your quick response.  It doesn't access or modify any
views.  It accesses the context to read in some raw resources and
writes to the sqllite database also via context.




--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Dianne Hackborn » Sat, 14 Mar 2009 01:03:55 GMT


 At the very least, you should include (and look at!) the stack crawl of the
crash.  That will usually tell you all you need to know about why it
crashed.  The stack crawl is in the log.








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

--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by andrew » Sat, 14 Mar 2009 02:10:59 GMT


 Thanks for your quick response.  It doesn't access any other views.
It does access the context object so as to work with the sqlite dbs.

On Mar 13, 10:32am, Streets Of Boston <flyingdutc...@gmail.com>




--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Bob » Sat, 14 Mar 2009 02:16:57 GMT


 Thanks, I'll look more at the logs for crash issue.  But regardless of
the crash, am I correct in thinking that if I call a service it should
do its processing in the background and the main UI thread should
immediately update?  For this does it matter whether I start the
service from a background thread or not?  The crash doesn't occur for
a while into the processing but in the mean time my UI is not
progressing.






--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Dianne Hackborn » Sat, 14 Mar 2009 02:57:01 GMT


 m...  it sounds like you are just doing a lot of work in the main thread,
and getting an ANR dialog. Don't do that. :) If you have lots of work to
do, do it in a background thread. All Service callbacks happen on the main
thread.

On Fri, Mar 13, 2009 at 11:16 AM, Bob <bshumsk...@yahoo.com> wrote:



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

--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Bob » Sat, 14 Mar 2009 03:22:57 GMT


 gt;> If you have lots of work to do, do it in a background thread.

Thanks, I thought I running on a different thread by calling the
service from a background thread. Have I done this incorrectly or
should I not be using the context object?

public void openInitialThread() {
Thread updateThread = new Thread(null, backgroundRefresh2,
"new_thread");
updateThread.start();
}

private Runnable backgroundRefresh2 = new Runnable() {
public void run() {
ComponentName service=_context.startService(new Intent
(_context,InitialContentService.class));

}
};

On Mar 13, 12:56pm, Dianne Hackborn <hack...@android.com> wrote:
--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Mark Murphy » Sat, 14 Mar 2009 03:45:19 GMT


 


Personally, I prefer the pattern of starting the service on the UI
thread but then having the service immediately start up a background
thread to do its work. That way, the service encapsulates the thread --
the client does not need to know or care what the service's threading
model is.

-- 
Mark Murphy (a Commons Guy)
 http://commonsware.com 
Android Training in Sweden --  http://www.sotrium.com/training.php 

--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Dianne Hackborn » Sat, 14 Mar 2009 04:51:40 GMT


 tartService() tells the system to start the service.  The Service callbacks
are still made on the main thread, as always.

On Fri, Mar 13, 2009 at 12:22 PM, Bob <bshumsk...@yahoo.com> wrote:



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

--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Bob » Sat, 14 Mar 2009 07:49:01 GMT


 'm sorry, I don't understand what this means.  I have no callbacks.
The service inserts some data into the filesystem and then exists.
How do I this so the UI won't hang while the processing is going on?

On Mar 13, 2:51pm, Dianne Hackborn <hack...@android.com> wrote:
--~--~---------~--~----~------------~-------~--~----~



service start and ui hanging

by Dianne Hackborn » Sat, 14 Mar 2009 07:57:28 GMT


 ll of the callback methods on Service, such as onStart(), happen in the
main UI thread. If you have a long job to do, use the Thread class to do it
in another thread. Semantically this is the same as the Activity callbacks.

On Fri, Mar 13, 2009 at 4:48 PM, Bob <bshumsk...@yahoo.com> wrote:



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

--~--~---------~--~----~------------~-------~--~----~



Other Threads

1. Android 3.0 64-bit system host required?

I heard that in order to build Android 3.0 you need your build host
computer to have a 64bit OS installed (similar to Chromium OS build
requirement).

Is this true?

-- 

2. The ultimate, killer Android Marketplace replacement

It's not a technical issue. It's a business one. The first company
that works out agreements with most of the world's mobile carriers to
allow integrated billing for apps will quickly become the {*filter*}
application channel. As soon as users can click on a "buy" button and
have the app charged to their phone bill as a monthly fee, all other
channels will wither away. 99 cent apps will become 10 cents per
month. Users will be able to turn off billing by uninstalling the app,
which will make them more willing to try out new ones. Apps that are
useful will generate recurring revenue for the developers for years.

The short message is that Android apps should be billed the same way
99% of the world pays for phone services - monthly and on a single
bill.

-- 

3. map not api visible

4. AudioTrack - incorrect playback sample rate

5. How to change the icon position on a tab

6. GroupMembership problems in 1.6

7. help regarding custom scrollbar ...