But that will run the entire (test) method on the UI thread. If i need to run only a part of the test on the UI, the 'runOnMainSync(...)' is the way to go, isn't it?
On Aug 9, 12:08 pm, Romain Guy <[email protected]> wrote: > If you use Android's JUnit test runner, you can use the @OnUiThread > annotation to run a test on the UI thread :) > > On Mon, Aug 9, 2010 at 8:55 AM, Streets Of Boston > > > > > > <[email protected]> wrote: > > I had a similar problem. The problem i had was in JUnit tests, which > > run in non-UI threads, causing AsyncTasks to be loaded in non-UI > > threads and i got the same error message. However, as long as you > > create your process' first AsyncTask in a UI-thread, all next ones can > > be created in non-UI threads. > > > This is what i did in my JUnit tests: > > > First some 'static' code calls this method below as soon as possible, > > which creates a dummy AsyncTask that is never executed. It just makes > > sure that the Looper for every AsyncTask is created in a UI-thread. > > public static synchronized void initialize(Instrumentation inst) { > > if (hasBeenInitialized) > > return; > > > // Just to load AsyncTask in the main UI thread.... > > // If the first AsyncTask instance is loaded in any other thread, UI- > > callbacks will never work. > > inst.runOnMainSync(new Runnable() { > > public void run() { > > Object dummy = new AsyncTask<Void,Void,Void>() { > > protected Void > > doInBackground(Void... params) { return null; } }; > > } > > }); > > hasBeenInitialized = true; > > } > > > After this method has been called, AsyncTasks can be created from non- > > UI threads. > > > If you don't deal with JUnit tests and such, just make sure that your > > first (dummy) AsyncTask instance is created in a UI-thread (e.g > > onCreate). All subsequent ones can be created in non-UI threads. > > > However, TreKing's comments about calling performTask when your > > service starts is still very valid :-) > > > On Aug 9, 7:06 am, Samuh <[email protected]> wrote: > >> I have a helper class that contains definition of an AsyncTask(inner > >> class). Other classes instantiate this class and call one of its > >> method which in turn instantiates, the AsyncTask and starts execution. > > >> class TaskManager{ > > >> private class SomeTask extends AsyncTask<>{} > > >> public void performTask(){ > >> new SomeTask().execute(); > > >> } > >> } > > >> //usage: new TaskManager().performTask(); > > >> I schedule Alarms which when triggered start a Service. When the > >> service starts it creates a Runnable and enqueues it in the work > >> queue. From this Runnable, I want to instantiate my helper class and > >> start execution of the AsynTask. > > >> The problem is AsyncTask needs to be instantiated from main UI thread > >> I am getting errors as soon as the spawned thread calls the method of > >> the helper class. The exception is that AsyncTask cannot be called > >> from a thread that hasnt called Looper.prepare(). > > >> How do I avoid this? > > > -- > > You received this message because you are subscribed to the Google > > Groups "Android Developers" group. > > To post to this group, send email to [email protected] > > To unsubscribe from this group, send email to > > [email protected] > > For more options, visit this group at > >http://groups.google.com/group/android-developers?hl=en > > -- > Romain Guy > Android framework engineer > [email protected] > > 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- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

