我希望关闭时,我的j2me应用程序调用{{1}}和destroyApp()
当我在黑莓上运行时,在第二次启动时,静态变量将具有与之前运行时相同的值。
为什么他们没有获得初始值?如何确保应用程序初始化静态变量?
答案 0 :(得分:3)
这discussion at Blackberry support forums表明这是BlackBerry MIDlets的一个已知问题 - 至少对那些使用静态推送注册表的人来说。他们建议的解决方法是在startApp
中重新定义静态变量,或者去除静态推送。
这篇文章看起来值得广泛引用,因为有一个很好的代码示例和问题分析:
我能想出的最简单的例子是:
public class BasicMIDlet extends MIDlet { private static byte myByte = Byte.MIN_VALUE; public void startApp() { System.out.println("My byte: " + myByte); myByte = Byte.MAX_VALUE; notifyDestroyed(); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
每次应用启动时,您都希望myByte输出到-128, 但这是我的输出:
-------------------------------------------------------- Starting BBTest Started BBTest(159) Foreground BBTest(157) My byte: -128 <------------ Foreground net_rim_bb_ribbon_app(83) Exit BBTest(159) Starting BBTest Started BBTest(160) Foreground BBTest(157) My byte: 127 <------------ Foreground net_rim_bb_ribbon_app(83) Exit BBTest(160) Starting BBTest Started BBTest(161) Foreground BBTest(157) My byte: 127 <------------ Foreground net_rim_bb_ribbon_app(83) Exit BBTest(161) --------------------------------------------------------
我注意到了一些事情,如果我删除了静态推送注册表,那么 应用程序正常运行,每次输出-128。是的,我 感觉MIDlet在RIMlet之上运行,并且在 在midlet定义推送注册表的情况下,RIMlet正在全部运行 时间。所以我现在的问题是,除了之外还有其他任何解决方案 在每次运行时初始化静态变量(因为有 在我的应用程序中大约> 1000个这样的成员
答案 1 :(得分:1)
是的,黑莓midlet保留了静态变量的值。这是一个问题,我看到修复它的唯一方法是在启动时我们需要为静态值分配空值。例如,如果静态var声明为: public static String State = null; 并且在中间的生命周期中,值被设置为&#34;关闭&#34 ;; 然后在下一次启动应用程序时,值仍然是“关闭”#34;而不是null。
答案 2 :(得分:-2)
我想你的意思是“在第二次发布时,静态变量 不 具有与之前运行时相同的值。”
静态变量只能在应用程序的生命周期内保持其值。该应用在调用destroyApp()
/ notifyDestroyed()
时结束,因此值会丢失!
要在多次运行中保持状态,请使用RecordStore
。