Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


On 14/09/12 18:21, Michael Meeks wrote:
Hi there,

        I just got a crash in the PresentationActivity timerUpdateThread - it's
not related to this (I think) - but I guess this could cause some
nasties I suppose. It seems we're talking to the GUI from multiple
threads concurrently:
As far as I can tell I'm on the main thread when updating the GUI -- my "UpdateThread" should actually be a runnable (I've now renamed it as such) -- it is never started manually, but is passed to a handler which runs the run method on the event/GUI Thread after the specified delay. So I don't think it's a threading issue causing the crash.
http://developer.android.com/guide/components/processes-and-threads.html

        "Additionally, the Andoid UI toolkit is not thread-safe. So, you must
not manipulate your UI from a worker thread—you must do all manipulation
to your user interface from the UI thread. Thus, there are simply two
rules to Android's single thread model:

      1. Do not block the UI thread
      2. Do not access the Android UI toolkit from outside the UI thread"

        I was also amused to stumble over this:

http://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html

        Which is quite amusing ;-) Anyhow - perhaps I'm missing something - I
don't know what mTimeLabel.setText really does so ...

        Are we doing our slower IPC in a thread and leaving the main thread to
render ? (things are responsive so I assume so generally :-).

All the networking code is run in a separate thread (as required by android docs -- networking on the GUI thread results in errors being thrown -- except for writing to a stream). As far as I can tell all the GUI work is done in the GUI thread, with the timer update and any broadcasts from the background threads simply being handled as events on the GUI thread.

A summary of threads (to the best of my knowledge):

- GUI/event thread -- run by android, handles the timerUpdate events, and Broadcasts from the networking threads. - Network handling thread: deals with connecting to a server (i.e. the opening of a socket, up until sending a pin) and spawning the Client thread as necessary. - Client thread: listens to the network/bluetooth socket, and sends out broadcasts to the UI as appropriate when appropriate data is received on the socket.

I.e. as far as I can tell all UI work is done on the correct thread. What is however more complicated is the lifecycle of the activity and service, which has caused some issues (which is why that mCommunicationService==null check was needed), etc.


Cheers,

Andrzej


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.