静态变量保留以前启动的值

时间:2011-03-10 11:08:10

标签: java blackberry java-me

我希望关闭时,我的j2me应用程序调用{​​{1}}和destroyApp() 当我在黑莓上运行时,在第二次启动时,静态变量将具有与之前运行时相同的值。

为什么他们没有获得初始值?如何确保应用程序初始化静态变量?

3 个答案:

答案 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