Yes you definitely can not inflate views from the thread they won't run in. The reason is that views may create a handler, and when the handler is created it is bound to the thread that is creating it. So if you try to attach that view hierarchy to a window being run in another thread, all hell breaks loose as work is dispatched on two different threads.
On Thu, Oct 29, 2009 at 12:46 AM, Jayesh <jayeshsa...@gmail.com> wrote: > > > > On Oct 21, 10:24 pm, Streets Of Boston <flyingdutc...@gmail.com> > wrote: > > That's why i put 'official' in quotes :-) > > > > One should not manipulate windows/views in any other thread than the > > main UI-thread (e.g. textView.setText(...) or imageView.setImageBitmap > > (...), hiding/showing views, etc.). If you do this in a background > > thread, then you may get exceptions or other weird behavior. > > > > If 'inflating a view' falls under the 'manipulating windows/views' > > category then one should not inflate views inside any other thread by > > the main UI-thread. > > > > You are right. I finally got a report yesterday from one of the users > that a modified apk that does view inflating in GUI thread, doesn't > give this problem. I have released the fix accordingly and got one > more user confirming that it's working for him now. > > So thanks for the advice. Inflating view in a thread other than GUI > thread, indeed seems to be unsupported, even if it doesn't throw any > explicit exception deterministically. > > > I'm just saying: try to do the inflate in the main UI-thread and check > > if this solves the problem for HTC Heros. If so, your particular > > problem is fixed. > > > > On Oct 21, 11:34 am, Jayesh Salvi <jayeshsa...@gmail.com> wrote: > > > > > -- > > > Jayesh... > > > > > read more » > > > > > On Wed, Oct 21, 2009 at 7:39 PM, Streets Of Boston > > > <flyingdutc...@gmail.com>wrote: > > > > > > I still would try to inflate your view inside your main gui-thread > and > > > > not in a seperate background thread. > > > > > > The fact that it works on other phones does not guarantee it works on > > > > all phones, if inflating views on non-gui threads is 'officially' not > > > > supported. > > > > > Could you elaborate on how it is 'officially' not supported? > > > > > I know that a particular exception is thrown if the framework finds > that a > > > different thread is trying to manipulate widgets in view hierarchy.(I > hit it > > > yesterday elsewhere in the code, and it is not the same as this error). > I > > > haven't found any documentation in this matter, that mentions what is > > > supported/forbidden practice in this matter. Did I miss something? > > > > > > Who knows, it may fix it (if you already haven't tried it). :-) > > > > But i may be wrong... > > > > > > On Oct 20, 11:57 pm, Jayesh Salvi <jayeshsa...@gmail.com> wrote: > > > > > Thanks Shane and Amir for confirming the doubts. > > > > > It's frustrating that all I can say to users is to wait until > Sprint/HTC > > > > > issues firmware update, then hopefully the problem will be fixed. > The > > > > users > > > > > are willing to test if I have any fix, but I can't find root cause > even > > > > > after looking inside the android code, let alone a fix/workaround. > > > > > > > Does anyone know if Sprint or HTC have any channels to report > complaints? > > > > > Are there any means to know when they will issue next firmware > update? > > > > > > > IIUC Sprint HTC Hero is "with Google" branded phone. I would have > assumed > > > > it > > > > > would be the one with most conformance to Android platform; one > that has > > > > > passed all test suites required to qualify for the "with Google" > logo. > > > > Yet > > > > > we see these anomalies. :( > > > > > > > -- > > > > > Jayesh > > > > > > > On Mon, Oct 19, 2009 at 1:15 PM, Amir Alagic <amirs...@gmail.com> > wrote: > > > > > > > > I saw somwhere else that one developer also has problems only > with HTC > > > > > > Hero (Sprint) ... > > > > > > > > On Oct 18, 9:48 am, Shane <shanemenchi...@gmail.com> wrote: > > > > > > > We are having problems only with HTC Hero phones as well. Our > issue > > > > > > > is different that yours but it is very disappointing to see not > all > > > > > > > phones handle the SDK the same. > > > > > > > http://groups.google.com/group/android-developers/browse_thread/threa... > > > > > > > > > I suspect this is just going to get worse as more branded > android > > > > > > > experiences get released by manufacturers. GRRRRRRRR > > > > > > > > > On Oct 12, 9:46 pm, Jayesh Salvi <jayeshsa...@gmail.com> > wrote: > > > > > > > > > > I tried to look into the android framework code > > > > > > > > (link< > > > > > > > http://www.google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#uX1GffpyOZk/. > > > > .. > > > > > > > > android.view.InflateException Error inflating class > > > > > > > > java.lang.reflect.Constructor&l=458>). The topmost frame > refers to > > > > a > > > > > > 'throw' > > > > > > > > statement(line 512) that is inside a catch of a lower level > > > > exception. > > > > > > I > > > > > > > > can't tell what part of the createView() function throws that > lower > > > > > > level > > > > > > > > exception. > > > > > > > > I also tried to search around for the error string "Error > inflating > > > > > > class > > > > > > > > java.lang.reflect.Constructor", but couldn't found one with a > > > > similar > > > > > > stack > > > > > > > > trace. (There are known crashes with this error message > caused > > > > inside > > > > > > > > android.preference.* package, but mine is a simple widget > layout > > > > and > > > > > > not > > > > > > > > preferences, as you might have seen in the XML file I > attached > > > > > > earlier.) > > > > > > > > > > I now have 9 reports of this crash and all of them are > confirmed to > > > > be > > > > > > using > > > > > > > > Sprint HTC Hero devices. This problem hasn't been reported on > any > > > > other > > > > > > > > phone. Is it fair to assume that it's a problem in that > particular > > > > ROM? > > > > > > If > > > > > > > > that's so, then what options do I have to resolve this issue > - > > > > should I > > > > > > wait > > > > > > > > helplessly for HTC/Sprint's next update? > > > > > > > > > > Any suggestions are appreciated. > > > > > > > > > > Thanks. > > > > > > > > -- > > > > > > > > Jayesh > > > > > > > > > > On Mon, Oct 12, 2009 at 8:34 PM, Jayesh Salvi < > > > > jayeshsa...@gmail.com> > > > > > > wrote: > > > > > > > > > > > -- > > > > > > > > > Jayesh > > > > > > > > > > > On Mon, Oct 12, 2009 at 7:49 PM, Streets Of Boston < > > > > > > > > > flyingdutc...@gmail.com> wrote: > > > > > > > > > > >> I might be mistaken, > > > > > > > > >> But this part of the stack-trace worries me a bit: > > > > > > > > > > >> > android.view.LayoutInflater.inflate(LayoutInflater.java:276) > > > > > > com.altcanvas.readerscope.ItemDetails.<init>(ItemDetails.java: > > > > > > > > >> 145) > > > > > > > > > com.altcanvas.readerscope.ItemDetails.getInstance(ItemDetails.java: > > > > > > > > >> 566) > > > > > > > > >> com.altcanvas.readerscope.ReaderTask.doInBackground > > > > > > > > >> (ReaderTask.java:1027) > > > > > > > > > > >> Are you inflating a view in a background-thread and not in > the > > > > main > > > > > > > > >> gui-thread? > > > > > > > > >> But then again, your code works on other Android > phones.... > > > > > > > > > > > Yes that's true. The layout is inflated in background > thread, but > > > > is > > > > > > made > > > > > > > > > part of the root hierarchy (setContentView) only in the GUI > > > > thread. > > > > > > > > > > > This doesn't give any problem on emulator or any other > phones. > > > > > > > > > > >> On Oct 12, 12:02 am, Jayesh Salvi <jayeshsa...@gmail.com> > > > > wrote: > > > > > > > > >> > -- > > > > > > > > >> > Jayesh > > > > > > > > > > >> > On Mon, Oct 12, 2009 at 1:11 AM, Romain Guy < > > > > romain...@google.com > > > > > > > > > > >> wrote: > > > > > > > > > > >> > > Hi, > > > > > > > > > > >> > > The stack trace you showed is not useful. This is the > top of > > > > the > > > > > > > > >> > > exception chain, which means this exception was caused > by > > > > > > something > > > > > > > > >> > > else. Please show the "application specific stack > frames" > > > > you > > > > > > removed. > > > > > > > > > > >> > The complete stack trace is: > > > > > > > > > > >> > --------- Cause --------- > > > > > > > > > > >> > android.view.InflateException: Binary XML file line #27: > Error > > > > > > inflating > > > > > > > > >> > class java.lang.reflect.Constructor > > > > > > > > android.view.LayoutInflater.createView(LayoutInflater.java:512) > > > > > > > com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) > > > > > > > > > android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:562) > > > > > > android.view.LayoutInflater.rInflate(LayoutInflater.java:617) > > > > > > android.view.LayoutInflater.rInflate(LayoutInflater.java:620) > > > > > > android.view.LayoutInflater.rInflate(LayoutInflater.java:620) > > > > > > android.view.LayoutInflater.inflate(LayoutInflater.java:407) > > > > > > android.view.LayoutInflater.inflate(LayoutInflater.java:320) > > > > > > android.view.LayoutInflater.inflate(LayoutInflater.java:276) > > > > > > > > > com.altcanvas.readerscope.ItemDetails.<init>(ItemDetails.java:145) > > > > > > > > > com.altcanvas.readerscope.ItemDetails.getInstance(ItemDetails.java:566) > > > > > > > com.altcanvas.readerscope.ReaderTask.doInBackground(ReaderTask.java:1027) > > > > > > > > > com.altcanvas.readerscope.ReaderTask.doInBackground(ReaderTask.java:21) > > > > > > com.altcanvas.readerscope.UserTask$2.call(UserTask.java:187) > > > > > > > > > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256) > > > > > > > > >> > > java.util.concurrent.FutureTask.run(FutureTask.java:122) > > > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648) > > > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673) > > > > > > > > >> > java.lang.Thread.run(Thread.java:1058) > > > > > > > > >> > ------------------------------- > > > > > > > > > > >> > The code around line 145 in ItemDetails.java is: > > > > > > > > > > >> > 144. widerContainer = new LinearLayout(app); > > > > > > > > > > >> > 145. widerContainer.addView((LinearLayout) > inflater > > > > > > > > > > >> > 146. .inflate(R.layout.delcs,null), > > > > layoutFW); > > > > > > > > > > >> > 147. widerContainer.addView((LinearLayout) > inflater > > > > > > > > > > >> > 148. .inflate(R.layout.digg,null), > > > > layoutFW); > > > > > > > > > > >> > > On Sun, Oct 11, 2009 at 12:34 PM, Jayesh Salvi < > > > > > > jayeshsa...@gmail.com > > > > > > > > > > >> > > wrote: > > > > > > > > >> > > > Hi, > > > > > > > > >> > > > In past couple of days, users of my app have sent > crash > > > > > > reports > > > > > > > > >> > > indicating > > > > > > > > >> > > > errors in layout inflation. > > > > > > > > >> > > > "android.view.InflateException: Binary XML file line > #27: > > > > > > Error > > > > > > > > >> inflating > > > > > > > > >> > > > class java.lang.reflect.Constructor" > > > > > > > > >> > > > After some investigation I found out that all four > of them > > > > > > were > > > > > > > > >> using the > > > > > > > > >> > > > new Sprint HTC Hero devices. This error hasn't been > > > > reported > > > > > > on any > > > > > > > > >> other > > > > > > > > >> > > > device/ROM nor could I repro it in the emulator. > > > > ... > > > > read more » > > > -- 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 -~----------~----~----~----~------~----~------~--~---