Let's put a picture of hierarchy Viewer first: (Simulator Android4.4)
See the number 6, the relativelayout is mainactivity root viewgroup, and before relativelayout there are 5 layers, that is, the system default interface Decorview (framelayout)-- LinearLayout--framellayout-->actionbaroverlaylayout--and Contentframelayout.
Directly say the result, with the simulator in API19 that is Android4.4 on the maximum can be nested 39 layers, including the system default 5 layer, it is said that we can write the maximum 34 layers of nesting.
When the number of nesting layers reaches 40, the times are the following exceptions,
10-27 11:38:53.901 25582-25582/com.aquarius.customview e/androidruntime:fatal exception:main Process: Com.aquarius.customview, PID:25582Java.lang.StackOverflowError At Android.util.pools$synchronizedpool.acquire (pools.java:154) at Android.view.GLES20RecordingCanvas.ob Tain (Gles20recordingcanvas.java:43) at Android.view.GLES20DisplayList.start ( Gles20displaylist.java:61) at Android.view.View.getDisplayList (view . Java:13323) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.ViewGroup.dispatchDraw (V Iewgroup.java:2940) at Android.view.View.getDisplayList (view . Java:13357) at Android.view.View.getDisplayList (view . Java:13404) at Android.view.View.draw (view.java:14182) at Android.view.ViewGroup.drawChild (view Group.java:3103) at Android.view.View
View Code
The number of nesting layers on API23 Android6.0 can be more, experiment more than 40 layers still no crash
As for the specific version below 4.4, I did not test, and Android Open source major mobile phone manufacturers may modify the logic. However, due to the problem of backward compatibility, still should not nest too many layers,
When you write a layout hierarchy over 10 layers, you should consider optimizing the layout, because even if the application is not crash due to too many nesting, it can cause too much rendering time, which affects the smoothness of the UI.
Android Do you know how many layers will be crash after the interface layout is nested?