Android:增加呼叫堆栈大小

Android:增加呼叫堆栈大小,第1张

概述我有一个应用程序与非常复杂的UI,包含许多布局嵌套在另一个.在创建另一个布局时,我遇到了一个StackOverflowError 想知道,我创造了两个测试例子: 1)Hello world应用程序与以下xml为主要活动 <?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android. 我有一个应用程序与非常复杂的UI,包含许多布局嵌套在另一个.在创建另一个布局时,我遇到了一个StackOverflowError

想知道,我创造了两个测试例子:

1)Hello world应用程序与以下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个字节用于返回地址4个字节,用于参数= 8个字节. Dalvik的VM可能在每个元素中保持更多的信息,但是每个元素甚至16个字节* 260个调用=最大总体堆栈大小为4Kbytes.这似乎不够

有没有办法增加最大堆栈大小?

解决方法 您可能无法在主UI线程中增加调用堆栈大小(这是可以理解的,因为您应该在这里尽可能少的事情),但是您可以通过使用Thread对象的构造函数参数:
ThreadGroup group = new ThreadGroup("threadGroup");new Thread(group,runnableObject,"YourThreadname",2000000).start();

有了这个例子,我将堆栈大小从8k(大约260个调用)增加到2M(足够不能得到StackOverFlowException,当然你可以添加尽可能多的内存可以占用它),所以到最后对于更多的读者来说,这是您可以增加堆栈大小的方式,尽管不建议,但在某些情况下,实际上还需要一个具有广泛递归调用的算法,当然也可以通过在工作线程中进行所有的辛勤工作你应该)使用你指定的堆栈大小,并且只需在UI中使用主UI线程与处理程序或任何你想用来与之交互的机制来“发布”更改…

希望这可以帮助…

问候!

总结

以上是内存溢出为你收集整理的Android:增加呼叫堆栈大小全部内容,希望文章能够帮你解决Android:增加呼叫堆栈大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1133412.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存