Archive for Май, 2011

Занятный баг с TabHost в Android 2.1

Posted by Olegas on Май 04, 2011
IT / No Comments

Обнаружили с коллегой занятный баг в Android, связанный с работой TabHost.

Суть в следующем. Если после onCreate в вашей TabActivity внутри TabHost не будет создано ни одной корректной вкладки все хозяйство с треском осыпается. Причем стэк очень интересный. По нему сложно выявить причину ибо в нем нет ничего, кроме кода ядра ОС.

Выглядит примерно так

Exception: java.lang.NullPointerException
Message: null
Stacktrace:
        android.widget.TabWidget.dispatchDraw(TabWidget.java:241)
        android.view.ViewGroup.drawChild(ViewGroup.java:1565)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.ViewGroup.drawChild(ViewGroup.java:1565)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.ViewGroup.drawChild(ViewGroup.java:1565)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.View.draw(View.java:6588)
        android.widget.FrameLayout.draw(FrameLayout.java:383)
        android.view.ViewGroup.drawChild(ViewGroup.java:1567)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.View.draw(View.java:6588)
        android.widget.FrameLayout.draw(FrameLayout.java:383)
        com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1869)
        android.view.ViewRoot.draw(ViewRoot.java:1384)
        android.view.ViewRoot.performTraversals(ViewRoot.java:1149)
        android.view.ViewRoot.handleMessage(ViewRoot.java:1668)
        android.os.Handler.dispatchMessage(Handler.java:130)
        android.os.Looper.loop(Looper.java:154)
        android.app.ActivityThread.main(ActivityThread.java:4416)
        java.lang.reflect.Method.invokeNative(Native Method)
        java.lang.reflect.Method.invoke(Method.java:552)
        com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:910)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668)
        dalvik.system.NativeStart.main(Native Method)

Лечится, очевидно, корректной подготовкой табов в onCreate. Что интересно, в 2.2 такого бага уже нет.

Tags: ,