2011-03-10 5 views
1

내 j2me 애플리케이션 호출 destroyApp()notifyDestroyed()을 닫으려는 경우 을 블랙 베리에서 실행할 때 두 번째 실행에서 정적 변수는 이전 실행에서와 동일한 값을 갖습니다.정적 변수는 이전 출시에서 값을 유지합니다.

왜 초기 값을 얻지 못합니까? 어떻게 응용 프로그램이 정적 변수를 초기화하는지 확인할 수 있습니까?

답변

-2

난 당신이 "정적 변수 하지들이 이전 실행에 있던 같은 값을 갖게됩니다 두 번째 발사에서"의미 같아요.

정적 변수는 앱의 수명 기간 동안 만 값을 유지할 수 있습니다. 앱이 destroyApp()/notifyDestroyed()으로 호출되면 값이 손실됩니다.

여러 실행에 걸쳐 상태를 유지하려면 RecordStore을 사용하십시오.

1

그래, 블랙 베리 midlets는 정적 변수의 값을 유지합니다. 이것은 문제이며 문제를 해결하는 유일한 방법은 시작시 정적 값에 null 값을 할당해야한다는 것입니다. 예를 들어 정적 var가 다음과 같이 선언 된 경우 : public static String State = null; 중간 라이프 사이클에서 값은 "closed"로 설정됩니다. 그런 다음 응용 프로그램의 다음 시작시 값은 null 대신 "닫힌"상태로 유지됩니다.

3

discussion at Blackberry support forums은 적어도 정적 푸시 레지스트리를 사용하는 사용자는 BlackBerry 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을 기대 :

내가 가지고 올 수있는 가장 간단한 예는 이것이다 : 멋진 코드 예제 및 문제 분석 있기 때문에

이 포스팅은, 인용 광범위한 가치가 보인다

-------------------------------------------------------- 

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) 
-------------------------------------------------------- 

I : -128 앱을 시작 하지만 때마다 출력이 내 출력 뭔가를 알아 채 셨습니다. 정적 푸시 레지스트리를 제거하면 응용 프로그램이 정상적으로 작동하고 항상 -128을 출력합니다. 예, I 은 MIDlet이 RIMlet에서 실행되는 것과 동일한 느낌을 주며, 에서는 MIDlet이 푸시 (push) 레지스트리를 정의하는 경우 RIMlet이 모두 시간을 실행합니다. 그래서 제 질문은 지금, 어떤 솔루션은 이 (내 응용 프로그램에서 약> 1000 명 같은 멤버가 있기 때문에)

+0

는 RIM이 문제를 인정했다 모든 실행에 정적 변수를 초기화 이외 있습니까? 그렇다면 문제 번호는 무엇입니까? –

+0

@DavidAndreoletti 답변에서 "Blackberry 지원 포럼의 토론"이라고 표시된 링크를 따라 갔습니까? – gnat

관련 문제