매우 복잡한 UI를 가진 응용 프로그램을 가지고 있습니다. 다른 응용 프로그램을 많이 포함하여 많은 layouts
을 포함하고 있습니다. 다른 레이아웃을 만드는 동안, I는 StackOverflowError
Android : 호출 스택 크기 늘리기
가 궁금 잡았습니다 나는 두 개의 테스트 예제 만들었습니다 주요 활동에 대한 xml
을 다음과
1) 안녕하세요 세계 응용 프로그램을
<?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
VM이 모든 요소에서 더 많은 정보를 유지할 수 있지만 전체 스택 크기를 최대화하려면 16 bytes per element * 260 calls = about 4Kbytes
일 수도 있습니다. 이것은 충분하지 않습니다.
최대 스택 크기를 늘릴 수있는 방법이 있습니까?
사실 나는 스택 크기를 존중한다는 보장은 없지만 이것이 좋은 대답이라고 생각합니다. 가능한 경우 상황을 완전히 피하는 것이 가장 좋습니다. –
전적으로 동의합니다. 그러나 필요한 경우 마지막 리소스로 알아 두는 것이 좋습니다 ... –