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

时间:2010-02-05 16:43:01

标签: memory user-interface blackberry screen

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

感谢您的问候 Mintu

1 个答案:

答案 0 :(得分:7)

更新根据Marc评论

BB文档

引自How To - Manage UI interactions

  

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

引自What Is - 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);
                }
            });
        }
    }
}

结论

因此,在模态屏幕的情况下,最大计数为16,并且通用尺寸受设备jvm存储器限制 否则就是device SRAM memory amount