我有非常複雜的UI的應用程序,在含有許多彼此嵌套layouts
一個。雖然創建另一個佈局,我得了StackOverflowError
的Android:增加調用堆棧大小
想知道,我創建了兩個測試的例子:
1)你好世界下面xml
爲主要業務的應用
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<!-- ...So on 30 times... -->
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout>
<!-- ...So on 30 times... -->
</FrameLayout>
</FrameLayout>
</FrameLayout>
導致的StackOverflowError而繪製佈局(導致每個佈局遞歸地繪製它的孩子)
2)以下測試案例
public class TestOverflowActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overflow(0);
}
private void overflow(int i){
android.util.Log.i("Stack depth:", " = " + i);
overflow(i+1);
}
}
導致StackOverflowError
深度約260-270電話。
對於第二個測試用例,每次調用堆棧元素需要4個字節,參數= 8 bytes
的返回地址爲+ 4 bytes
。有可能Dalvik's
虛擬機會在每個元素中保留一些信息,但即使是16 bytes per element * 260 calls = about 4Kbytes
也是最大的整體堆棧大小。這似乎不夠。
有沒有辦法增加最大堆棧大小?
沒錯,我認爲這是一個很好的答案,但我不認爲它會保證遵守堆棧大小?如果可能的話,最好儘量避免這種情況。 – 2013-11-16 00:24:20
完全同意,但如果需要作爲最後資源,可以知道是可能的。 – 2013-11-17 01:19:41