有人知道我们可以在不调用popscreen()的情况下在UiApplication中推送多少个屏幕,以及每个屏幕类的最大文件大小。
感谢您的问候 Mintu
答案 0 :(得分:7)
更新根据Marc评论
引自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。