मेरे पास बहुत ही जटिल यूआई वाला एक एप्लीकेशन है, जिसमें layouts
एक दूसरे में घोंसला है। जबकि एक और लेआउट बनाना, मैं एक StackOverflowError
एंड्रॉइड: कॉल स्टैक आकार बढ़ाएं
सोच पकड़ा गया है, मैं दो परीक्षण उदाहरण तैयार किए:
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 के बारे में कॉल पर कारण बनता है।
दूसरे टेस्ट केस के लिए स्टैक तत्व की प्रत्येक कॉल पैरामीटर = 8 bytes
के लिए वापसी पते + 4 bytes
के लिए 4 बाइट लेती है। यह संभव है कि Dalvik's
वीएम अधिकतम तत्वों के लिए प्रत्येक तत्व में थोड़ी अधिक जानकारी रखता है, लेकिन अधिकतम समग्र स्टैक आकार के लिए 16 bytes per element * 260 calls = about 4Kbytes
भी। यह पर्याप्त प्रतीत नहीं होता है।
अधिकतम स्टैक आकार बढ़ाने का कोई तरीका है?
सच है, और मुझे लगता है कि यह एक अच्छा जवाब है, हालांकि मुझे नहीं लगता कि यह स्टैक आकार का सम्मान करने की गारंटी है? संभवतः पूरी तरह से स्थिति से बचने के लिए सबसे अच्छा है। –
पूरी तरह से सहमत हैं, लेकिन यह जानना अच्छा है कि अंतिम संसाधन के रूप में आवश्यक होने पर यह संभव है ... –