2011-03-10 31 views
1

我的j2me應用程序調用destroyApp()notifyDestroyed()當它想要關閉時 當我在黑莓上運行時,在第二次啓動時,靜態變量將具有與上次運行時相同的值。靜態變量保留先前啓動的值

爲什麼他們沒有得到初始值?我如何確保應用程序初始化靜態變量?

回答

-2

我猜你的意思是「在第二次發射的靜態變量將有他們在前面的運行有同樣的價值觀」。

靜態變量只能在應用程序的整個生命週期內保持其值。該應用程序在destroyApp()/notifyDestroyed()被調用時結束,因此值已丟失!

要堅持國家多次運行,使用RecordStore

1

是的,黑莓midlets保留了靜態變量的值。這是一個問題,我認爲解決這個問題的唯一方法是在啓動時我們需要爲靜態值分配空值。例如,如果聲明一個靜態var,如下所示: public static String State = null; 而在中間的生命週期中,該值設置爲「關閉」; 然後在應用程序的下一次啓動中,該值保持「關閉」而不是空值。

3

discussion at Blackberry support forums表明它是一個已知的問題與黑莓手機的MIDlet - 至少用靜推登記的。他們建議的變通方法是在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名這樣的成員)

+0

已RIM承認問題的其他?如果是,它的問題編號是什麼? – 2012-05-03 10:30:56

+0

@DavidAndreoletti您是否按照答案中的鏈接 - 標有「在Blackberry支持論壇上討論」的鏈接? – gnat 2012-05-03 11:31:35