Я наконец разобрался! Для начала, это была моя установка:
UI thread -> AsyncTask.doInBackground -> inflate
Это прекрасно работало в симуляторе с 1.6 до 2.3 и на других телефонах (LG и Motorola), однако на HTC (Desire и Wildfire) взорвалось. Фактической ошибкой было InflateException «Ошибка надувания класса», вызванная InvocationTargetException, вызванного RuntimeException «Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare ()».
Я изменил этот набор до
UI thread -> create Handler
UI thread -> AsyncTask.doInBackground -> Handler.sendMessage
Handler.handleMessage() -> inflate
Это привело к точно такой же ошибке. Это было странно, так как код был выполнен изнутри обработчика, созданного в потоке пользовательского интерфейса (см. Строки с ** вокруг него).
android.view.InflateException: Binary XML file line #32: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:513)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at com.ookl.ookllite.view.Search.createLayout(Search.java:57)
at com.ookl.ookllite.view.Search.<init>(Search.java:44)
at com.ookl.ookllite.OOKL.setupScreens(OOKL.java:1232)
at com.ookl.ookllite.OOKL.access$0(OOKL.java:1199)
**at com.ookl.ookllite.OOKL$1.handleMessage(OOKL.java:160)**
at com.ookl.ookllite.OOKL$SetupAppTask.doInBackground(OOKL.java:281)
at com.ookl.ookllite.OOKL$SetupAppTask.doInBackground(OOKL.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at java.lang.Thread.run(Thread.java:1102)
Caused by: java.lang.reflect.InvocationTargetException
...
Наконец, что за хитрость была такая:
UI thread -> create Runnable
UI thread -> create Handle
UI thread -> AsyncTask.doInBackground -> Handler.post(Runnable)
Runnable.run -> inflate
И это было так - теперь он работал как на Desire, так и на Wildfire.
Не уверен, что у вас возникла такая же проблема, но, надеюсь, это поможет вам.