Blackberry - UI堆栈中要推送的最大屏幕数

Har*_*hna 2 memory user-interface blackberry screen

有没有人知道我们可以在不调用popscreen()的情况下在UiApplication中推送多少个屏幕,以及每个屏幕类的最大文件大小.

感谢Mintu

Mak*_*tar 7

根据马克评论 更新

BB文档

引用如何 - 管理UI交互:

在用户界面(UI)堆栈上管理应用程序屏幕时,请勿使pushScreen()和popScreen()不匹配.当BlackBerry智能手机用户完成与屏幕的交互时,弹出UI堆栈的屏幕; 否则,显示器堆栈会继续增长,直到BlackBerry智能手机内存不足.您不应该一次使用多个模态屏幕,因为每个屏幕都使用一个线程,您不应只弹出一次屏幕.如果您多次弹出屏幕,BlackBerry智能手机拨轮/轨迹球和键盘可能会无响应.

什么 - TooManyThreadsError:

单个应用程序最多可以创建16个线程.所有应用程序在BlackBerry设备上可以存在的线程总数为128.因此,如果应用程序已创建了16个线程,则第17次尝试将失败并引发TooManyThreadsError异常.同样,如果BlackBerry设备上已创建128个线程且应用程序尝试创建另一个线程,则会引发TooManyThreadsError异常.

测试应用

alt text http://img52.imageshack.us/img52/5937/8300testscrcount.jpg

class PushScr extends MainScreen {
    static int mScrCount = 0;
    Screen mContext = this;    
    public PushScr() {
        mScrCount++;
        add(new LabelField("screen count: " + mScrCount));
        add(new LabelField("threads count: " + Thread.activeCount()));
        add(new LabelField("memory used: "
                + Memory.getRAMStats().getAllocated()));
    }    
    protected void makeMenu(Menu menu, int instance) {
        super.makeMenu(menu, instance);
        menu.add(new MenuItem("push screen", 0, 0) {
            public void run() {
                Ui.getUiEngine().pushScreen(new PushScr());
            }
        });    
        menu.add(new MenuItem("push modal screen", 0, 0) {
            public void run() {
                Ui.getUiEngine().pushModalScreen(new PushScr());
            }
        });
        if (mScrCount > 1) {
            menu.add(new MenuItem("pop screen", 0, 0) {
                public void run() {
                    Ui.getUiEngine().popScreen(mContext);
                }
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结论

因此,在模态屏幕的情况下,最大计数为16,并且通用大小受设备jvm内存的限制.
否则就是设备SRAM内存量.

  • 我认为普通的pushScreen()不会在每个屏幕上使用一个线程 - 也许KB文章指的是使用pushModalScreen()方法推送的屏幕? (2认同)