Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-16 Thread Kostya Vasilyev
2012/8/16 b0b 

>
>> It seems that inflating views just isn't very fast, even with the binary
>> XML format and stuff.
>>
>>
> Yes it can be very slow for complex layouts.
>

I wouldn't consider 8-10 views, times 7-8 list view items very complex.


>
> It is unfortunate that it is not safe to invoke the layout inflater  in a
> thread to preload the layout while displaying a loading screen ,
>

I suppose one could preload some views in advance on the UI thread, taking
10-15 ms here and there when noone's looking... but it's kind of unpleasant
to manage and wouldn't work in your case with the initial onCreate


> to avoid the "black screen" effect while the app is busy in onCreate()
> loading the layout.
>

I'm not getting the black screen, but the 150-200 ms is very noticeable
(the db query behind the list view runs on a worker thread and takes 10-20
ms -- these times are from when I update the adapter to when the list view
is done with its layout).

... except, well, on my app's initial screen when posting a dialog (the
changelog after a version update), which is kind of unpleasant too, will
need to look at that.

-- K

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-16 Thread b0b

>
>
> It seems that inflating views just isn't very fast, even with the binary 
> XML format and stuff.
>
>
Yes it can be very slow for complex layouts. 

It is unfortunate that it is not safe to invoke the layout inflater  in a 
thread to preload the layout while displaying a loading screen , 
to avoid the "black screen" effect while the app is busy in onCreate() 
loading the layout.


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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-16 Thread Kostya Vasilyev
2012/8/16 b0b 

>
>
> On Thursday, 16 August 2012 03:47:02 UTC+2, MagouyaWare wrote:
>
>> As for onCreate() you shouldn't really be doing ANYTHING except calling
>> setContentView() and initializing a few member variables.  Anything else
>> needs to go in a separate thread (perhaps using AsyncTask) to do heavy
>> initialization/work...
>>
>>
> Yes absolutely, using threading or lazy initalization when appropriate.
> onCreate(), onResume(), onStart() have to execute as fast as possible.  The
> only limiting factor here
> is is the time taken by loading layouts which cannot be easily reduced or
> reduced at all.
>

It seems that inflating views just isn't very fast, even with the binary
XML format and stuff.

I recently spent some time profiling my app's opening a ListView
containing... a list... of data items (duh).

On a Galaxy Nexus, there are about 7-8 of them fitting on the screen, each
having about 8-10 child views in a RelativeLayout.

The initial onLayout() takes about 150-200ms, which is very noticable. The
time spent in the layout inflater (called by getView, called during this
initial layout to make scrap views) is about 2/3 of that.

By comparison, the Gmail app's (just to pick an example) list rendering is
really fast -- but then each item in their message list is a sinlge Android
view.

-- K

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-16 Thread b0b


On Thursday, 16 August 2012 03:47:02 UTC+2, MagouyaWare wrote:
>
> Then you would need to talk to the makers of the roms that are doing 
> this... 
>
Yes after even more digging deeper, it is due to a recent CM commit:

http://review.cyanogenmod.com/#/c/18319/1

which is enabled if build type != user. That's the case in CM9 since for 
some reason they only know about, build type = userdebug.

It is stupid to have this patch enabled by default as it affects 
performance for all their users.

 

> As for onCreate() you shouldn't really be doing ANYTHING except calling 
> setContentView() and initializing a few member variables.  Anything else 
> needs to go in a separate thread (perhaps using AsyncTask) to do heavy 
> initialization/work...
>
>
Yes absolutely, using threading or lazy initalization when appropriate. 
onCreate(), onResume(), onStart() have to execute as fast as possible.  The 
only limiting factor here
is is the time taken by loading layouts which cannot be easily reduced or 
reduced at all.

 

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-15 Thread Justin Anderson
Then you would need to talk to the makers of the roms that are doing
this...

As for onCreate() you shouldn't really be doing ANYTHING except calling
setContentView() and initializing a few member variables.  Anything else
needs to go in a separate thread (perhaps using AsyncTask) to do heavy
initialization/work...
On Aug 15, 2012 5:16 PM, "b0b"  wrote:

> After more investigations, it look like each of this  Wrote stack traces"
> logcat line will write a /data/anr/slow??.txt :
>
>
> shell@android:/data/anr $ ls
> slow00.txt
> slow01.txt
> slow02.txt
> slow03.txt
> slow04.txt
> slow05.txt
> slow06.txt
> slow07.txt
> slow08.txt
> slow09.txt
> traces.txt
>
>
> My question to thows in the know is
>
> - can it be disabled ? I had high hope in a property called
> dalvik.vm.lockprof.threshold set to 500 but chaning it or removing it
> doesn't do anything.
> - who thought that this "feature" to write stack traces if the UI thread
> is blocked for 500ms is a good idea ? Is it to make the device even
> slower, writing stack trace that nobody will ever read ?
>
> This "feature" seems to be only be enabled on some ROMs but doesn't look
> restricted to CyanogenMod.
>
>
> On Wednesday, 15 August 2012 23:14:40 UTC+2, b0b wrote:
>>
>> I'm now convinced it is a CM9 issue as it writes stack traces for almost
>> any app, at startup but also sometimes during normal execution.
>>
>> To prove I am not affabulating, this when starting the camera app (in
>> between lines omitted):
>>
>> 08-15 23:08:57.078: I/dalvikvm(30403): Wrote stack traces to
>> '/data/anr/traces.txt'
>> 08-15 23:08:57.128: I/dalvikvm(30403): Wrote stack traces to
>> '/data/anr/traces.txt'
>> 08-15 23:08:57.582: I/dalvikvm(30403): Wrote stack traces to
>> '/data/anr/traces.txt'
>> 08-15 23:08:58.058: I/dalvikvm(30403): Wrote stack traces to
>> '/data/anr/traces.txt'
>> 08-15 23:08:58.558: I/dalvikvm(30403): Wrote stack traces to
>> '/data/anr/traces.txt'
>> 08-15 23:08:59.011: I/dalvikvm(30403): Wrote stack traces to
>> '/data/anr/traces.txt'
>>
>> That could explained why I noticed some unexlained lags on my Samsung
>> Galaxy S CM9.
>> It looks like it spends its time writing stack traces...
>>
>> Well, that issue will have had the benefit to make me turbo optimize
>> onCreate() and friends while trying to get rid of it.
>>
>  --
> 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

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-15 Thread b0b
After more investigations, it look like each of this  Wrote stack traces" 
logcat line will write a /data/anr/slow??.txt :


shell@android:/data/anr $ ls
slow00.txt
slow01.txt
slow02.txt
slow03.txt
slow04.txt
slow05.txt
slow06.txt
slow07.txt
slow08.txt
slow09.txt
traces.txt


My question to thows in the know is 

- can it be disabled ? I had high hope in a property called 
dalvik.vm.lockprof.threshold set to 500 but chaning it or removing it
doesn't do anything.
- who thought that this "feature" to write stack traces if the UI thread is 
blocked for 500ms is a good idea ? Is it to make the device even 
slower, writing stack trace that nobody will ever read ?

This "feature" seems to be only be enabled on some ROMs but doesn't look 
restricted to CyanogenMod.


On Wednesday, 15 August 2012 23:14:40 UTC+2, b0b wrote:
>
> I'm now convinced it is a CM9 issue as it writes stack traces for almost 
> any app, at startup but also sometimes during normal execution. 
>
> To prove I am not affabulating, this when starting the camera app (in 
> between lines omitted):
>
> 08-15 23:08:57.078: I/dalvikvm(30403): Wrote stack traces to 
> '/data/anr/traces.txt'
> 08-15 23:08:57.128: I/dalvikvm(30403): Wrote stack traces to 
> '/data/anr/traces.txt'
> 08-15 23:08:57.582: I/dalvikvm(30403): Wrote stack traces to 
> '/data/anr/traces.txt'
> 08-15 23:08:58.058: I/dalvikvm(30403): Wrote stack traces to 
> '/data/anr/traces.txt'
> 08-15 23:08:58.558: I/dalvikvm(30403): Wrote stack traces to 
> '/data/anr/traces.txt'
> 08-15 23:08:59.011: I/dalvikvm(30403): Wrote stack traces to 
> '/data/anr/traces.txt'
>
> That could explained why I noticed some unexlained lags on my Samsung 
> Galaxy S CM9.
> It looks like it spends its time writing stack traces...
>
> Well, that issue will have had the benefit to make me turbo optimize 
> onCreate() and friends while trying to get rid of it.
>

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-15 Thread b0b
I'm now convinced it is a CM9 issue as it writes stack traces for almost 
any app, at startup but also sometimes during normal execution. 

To prove I am not affabulating, this when starting the camera app (in 
between lines omitted):

08-15 23:08:57.078: I/dalvikvm(30403): Wrote stack traces to 
'/data/anr/traces.txt'
08-15 23:08:57.128: I/dalvikvm(30403): Wrote stack traces to 
'/data/anr/traces.txt'
08-15 23:08:57.582: I/dalvikvm(30403): Wrote stack traces to 
'/data/anr/traces.txt'
08-15 23:08:58.058: I/dalvikvm(30403): Wrote stack traces to 
'/data/anr/traces.txt'
08-15 23:08:58.558: I/dalvikvm(30403): Wrote stack traces to 
'/data/anr/traces.txt'
08-15 23:08:59.011: I/dalvikvm(30403): Wrote stack traces to 
'/data/anr/traces.txt'

That could explained why I noticed some unexlained lags on my Samsung 
Galaxy S CM9.
It looks like it spends its time writing stack traces...

Well, that issue will have had the benefit to make me turbo optimize 
onCreate() and friends while trying to get rid of it.

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-15 Thread Gergely Juhász
Kedves Tamás,

It's really strange. What are you doing in your view's constructor? I
view's constructor mostly reads's out the given attributes depending
on the given style. Init some members, like Paint objects, but usually
that's all.
Every "hard" work comes after it's attached to the hierarchy (like
measure, layout placement, drawing).

On 15 August 2012 23:02, b0b  wrote:
> My Asus TF101 running stock ICS doesn't display  the "Wrote stack traces"
> line  in the logcat every 500ms the UI thread is not responding, which make
> me think it could be a CM9 issue or bug ?
>
>
>
> On Wednesday, 15 August 2012 22:39:09 UTC+2, b0b wrote:
>>
>>
>>
>> On Wednesday, 15 August 2012 22:07:46 UTC+2, Romain Guy (Google) wrote:
>>>
>>> An ANR is triggered if the UI thread is blocked for 5 seconds, not 500ms.
>>>
>>>
>>
>> Yes, but until the ANR hapens (or not if the UI thread is blocked fior
>> say...3s), the logcat spams these messages every 500ms (CM9, ICS 4.0.4):
>>
>> 08-15 15:33:24.804: I/dalvikvm(8550): threadid=3: reacting to signal 3
>> 08-15 15:33:24.882: I/dalvikvm(8550): Wrote stack traces to
>> '/data/anr/traces.txt'
>>
>> Shouldn't it write this file only when the ANR happens (5s) ?
>
> --
> 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

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


Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-15 Thread b0b
My Asus TF101 running stock ICS doesn't display  the "Wrote stack traces" 
line  in the logcat every 500ms the UI thread is not responding, which make 
me think it could be a CM9 issue or bug ?


On Wednesday, 15 August 2012 22:39:09 UTC+2, b0b wrote:
>
>
>
> On Wednesday, 15 August 2012 22:07:46 UTC+2, Romain Guy (Google) wrote:
>>
>> An ANR is triggered if the UI thread is blocked for 5 seconds, not 500ms.
>>
>>
> Yes, but until the ANR hapens (or not if the UI thread is blocked fior 
> say...3s), the logcat spams these messages every 500ms (CM9, ICS 4.0.4):
>
> 08-15 15:33:24.804: I/dalvikvm(8550): threadid=3: reacting to signal 3
> 08-15 15:33:24.882: I/dalvikvm(8550): Wrote stack traces to 
> '/data/anr/traces.txt'
>
> Shouldn't it write this file only when the ANR happens (5s) ?
>

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-15 Thread b0b


On Wednesday, 15 August 2012 22:07:46 UTC+2, Romain Guy (Google) wrote:
>
> An ANR is triggered if the UI thread is blocked for 5 seconds, not 500ms.
>
>
Yes, but until the ANR hapens (or not if the UI thread is blocked fior 
say...3s), the logcat spams these messages every 500ms (CM9, ICS 4.0.4):

08-15 15:33:24.804: I/dalvikvm(8550): threadid=3: reacting to signal 3
08-15 15:33:24.882: I/dalvikvm(8550): Wrote stack traces to 
'/data/anr/traces.txt'

Shouldn't it write this file only when the ANR happens (5s) ?

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-08-15 Thread Romain Guy
An ANR is triggered if the UI thread is blocked for 5 seconds, not 500ms.
On Aug 15, 2012 9:15 PM, "b0b"  wrote:

> Interesting discussion but how are we supposed to handle setContentView()
> (which calle the layour inflater, which instantiates views),
> taking a lot of time for complex layouts ?
>
> In ICS+, if  the main UI thread is stuck for more than approx 500ms the
> system great the app with a super aggressive:
>
> 08-15 15:33:24.804: I/dalvikvm(8550): threadid=3: reacting to signal 3
> 08-15 15:33:24.882: I/dalvikvm(8550): Wrote stack traces to
> '/data/anr/traces.txt'
>
> which further slow down app startup (writing on the SD Card take some
> time).
>
> So if setContentView() takes more than 500ms (not an uncommon occurence),
> then the system penalize the app
> even more, writting unwanted stack traces (the app is not ANRing at this
> stage, it is starting).
>
> Since is not safe to call the layout inflater in an AsyncTask to load it
> in the background while displaying some progress display,
> this result in Activities displaying a black screen until  onCreate()
> finishes which may be quite some time if setContentView() cannot be
> executed fast.
>
>
>
>
>
>  --
> 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

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

Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-06-26 Thread Mark Murphy
On Tue, Jun 26, 2012 at 6:51 PM, Tamás Kovács
 wrote:
> but it seems that my custom View is so complex that it
> takes 1 second to instantiate (even if its drawables are preloaded).

Step #1: Run Traceview on your app.

Step #2: Find where the real problem is.

Step #3: Fix the real problem.

For example, if the real problem is too many views, find ways to
consolidate them (e.g., compound drawables in TextViews,
RelativeLayout or GridLayout instead of nested LinearLayouts).

-- 
Mark Murphy (a Commons Guy)
http://commonsware.com | http://github.com/commonsguy
http://commonsware.com/blog | http://twitter.com/commonsguy

Android Training in DC: http://marakana.com/training/android/

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


Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-06-26 Thread Romain Guy
And if you have performance issues when instantiating certain Views,
please let us know so we can fix it.

On Tue, Jun 26, 2012 at 3:26 PM, Streets Of Boston
 wrote:
> I would still advise against it, because you don't have control of the code
> after you call the constructor of the View.
>
> Creating a View should never be that expensive (i.e. time consuming) that it
> could not be done on the UI thread.
> If the creation of the View needs other pieces of data that are expensive to
> compute, just compute those pieces of data in the background thread and
> create the View in the UI thread after that, giving it the earlier computed
> data.
>
>
> On Tuesday, June 26, 2012 6:04:44 PM UTC-4, Tamás Kovács wrote:
>>
>> OK I made additional research and source code exploring:
>>
>> only *ViewGroup* and its descendants check the Thread, the *View*
>> class does not. It does not even STORE the thread which created it.
>>
>> Based on this, it should be safe to create Views (but never
>> Viewgroups) in different threads. It would be nice if Dianne or Romain
>> could confirm this.
>>
>> On Jun 26, 10:53 pm, Justin Anderson  wrote:
>> > I'm not sure, but I doubt it...  Have you tried it? Did it work?
>> >
>> > Thanks,
>> > Justin Anderson
>> > MagouyaWare Developerhttp://sites.google.com/site/magouyaware
>> >
>> > On Tue, Jun 26, 2012 at 2:27 PM, Tamás Kovács
>> > wrote:
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > > I know that the UI elements (View hierarchy) may only be manipulated
>> > > from the UI thread. For a background operation, the AsyncTask can be
>> > > used, which offers event handers to reach the UI thread.
>> >
>> > > To be brief, is it allowed to instantiate a View (tied to
>> > > getApplicationContext()) in a non-UI thread? This custom View
>> > > descendant -- once instantiated -- is added to the view hierarchy from
>> > > the UI thread. So only the constructor call is done inside an
>> > > Asynctask.doInBackground; its attaching (addView(...))to the
>> > > Activity's root layout hierarchy is still done in the UI thread.
>> >
>> > > (I pre-instantiate the View in an asynctask because when it's needed
>> > > in an Activity, it must be instantly displayed.)
>> >
>> > > --
>> > > 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
>
> --
> 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



-- 
Romain Guy
Android framework engineer
romain...@android.com

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


Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-06-26 Thread Romain Guy
It is not safe, and definitely not guaranteed to even work.

On Tue, Jun 26, 2012 at 3:04 PM, Tamás Kovács
 wrote:
> OK I made additional research and source code exploring:
>
> only *ViewGroup* and its descendants check the Thread, the *View*
> class does not. It does not even STORE the thread which created it.
>
> Based on this, it should be safe to create Views (but never
> Viewgroups) in different threads. It would be nice if Dianne or Romain
> could confirm this.
>
> On Jun 26, 10:53 pm, Justin Anderson  wrote:
>> I'm not sure, but I doubt it...  Have you tried it? Did it work?
>>
>> Thanks,
>> Justin Anderson
>> MagouyaWare Developerhttp://sites.google.com/site/magouyaware
>>
>> On Tue, Jun 26, 2012 at 2:27 PM, Tamás Kovács
>> wrote:
>>
>>
>>
>>
>>
>>
>>
>> > I know that the UI elements (View hierarchy) may only be manipulated
>> > from the UI thread. For a background operation, the AsyncTask can be
>> > used, which offers event handers to reach the UI thread.
>>
>> > To be brief, is it allowed to instantiate a View (tied to
>> > getApplicationContext()) in a non-UI thread? This custom View
>> > descendant -- once instantiated -- is added to the view hierarchy from
>> > the UI thread. So only the constructor call is done inside an
>> > Asynctask.doInBackground; its attaching (addView(...))to the
>> > Activity's root layout hierarchy is still done in the UI thread.
>>
>> > (I pre-instantiate the View in an asynctask because when it's needed
>> > in an Activity, it must be instantly displayed.)
>>
>> > --
>> > 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
>
> --
> 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



-- 
Romain Guy
Android framework engineer
romain...@android.com

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


Re: [android-developers] Re: Instantiating (but not attaching!) a View from a non-UI thread

2012-06-26 Thread Dianne Hackborn
No, it is not safe.  Don't do this.

The documentation is very clear about this:
http://developer.android.com/reference/android/view/View.html

"Note: The entire view tree is single threaded. You must always be on the
UI thread when calling any method on any view."

This wasn't written to mislead people into thinking that it works a
different way than it does: it is because it is true, the view hierarchy is
single-threaded, and it is explicitly not designed to be used from multiple
threads.

If you think that not seeing checks about which thread calls are being made
on indicates that something is safe to use from multiple threads, you
should probably stop whatever multi-threaded programming you are doing and
rethink it. :}

Even instantiating a view from one thread and attaching it to a view
hierarchy in another is not safe, because many views will internally create
Handler objects that are bound to whatever thread they were created on,
causing you to have parts of your view hierarchy running on the wrong
thread with bad results.

On Tue, Jun 26, 2012 at 2:00 PM, Tamás Kovács
wrote:

> It works seamlessly like a charm. It would be nice to know if this is
> supported/acceptable generally.
>
> I hope we'll get an answer from the Android guys/ladies.
>
>
> On Jun 26, 10:53 pm, Justin Anderson  wrote:
> > I'm not sure, but I doubt it...  Have you tried it? Did it work?
> >
> > Thanks,
> > Justin Anderson
> > MagouyaWare Developerhttp://sites.google.com/site/magouyaware
> >
> > On Tue, Jun 26, 2012 at 2:27 PM, Tamás Kovács
> > wrote:
> >
> >
> >
> >
> >
> >
> >
> > > I know that the UI elements (View hierarchy) may only be manipulated
> > > from the UI thread. For a background operation, the AsyncTask can be
> > > used, which offers event handers to reach the UI thread.
> >
> > > To be brief, is it allowed to instantiate a View (tied to
> > > getApplicationContext()) in a non-UI thread? This custom View
> > > descendant -- once instantiated -- is added to the view hierarchy from
> > > the UI thread. So only the constructor call is done inside an
> > > Asynctask.doInBackground; its attaching (addView(...))to the
> > > Activity's root layout hierarchy is still done in the UI thread.
> >
> > > (I pre-instantiate the View in an asynctask because when it's needed
> > > in an Activity, it must be instantly displayed.)
> >
> > > --
> > > 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
>
> --
> 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
>



-- 
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, and so won't reply to such e-mails.  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