非常に複雑なUIを持つアプリケーションがあり、多くの場合、入れ子になったlayouts
が多数含まれています。こんにちはAndroid:呼び出しスタックサイズを増やす
<?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>
主な活動のためにxml
を以下で世界のアプリケーションがにStackOverflowErrorしばらくの原因となる)
1:別のレイアウトを作成している間、私は疑問に思うStackOverflowError
をキャッチしてきた、私は2つの試験例を作成しましたレイアウトを描画する(すべてのレイアウトが再帰的に子を描画するため)
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コールの原因となります。
2番目のテストケースのスタック要素を呼び出すたびに、パラメータ= 8 bytes
の戻りアドレス+ 4 bytes
には4バイトかかります。 Dalvik's
VMはすべての要素でさらに多くの情報を保持する可能性がありますが、合計スタックサイズを最大限にするためには16 bytes per element * 260 calls = about 4Kbytes
さえあります。これでは十分ではないようです。
最大スタックサイズを増やす方法はありますか?
真実ですが、これは良い答えだと思いますが、私はスタックサイズを尊重することは保証されていないと思いますか?できるだけ完全に状況を避けるのが最善の方法です。 –
完全に同意しますが、最後のリソースとして必要であれば知ることは可能です –