내 j2me 애플리케이션 호출 destroyApp()
및 notifyDestroyed()
을 닫으려는 경우 을 블랙 베리에서 실행할 때 두 번째 실행에서 정적 변수는 이전 실행에서와 동일한 값을 갖습니다.정적 변수는 이전 출시에서 값을 유지합니다.
왜 초기 값을 얻지 못합니까? 어떻게 응용 프로그램이 정적 변수를 초기화하는지 확인할 수 있습니까?
내 j2me 애플리케이션 호출 destroyApp()
및 notifyDestroyed()
을 닫으려는 경우 을 블랙 베리에서 실행할 때 두 번째 실행에서 정적 변수는 이전 실행에서와 동일한 값을 갖습니다.정적 변수는 이전 출시에서 값을 유지합니다.
왜 초기 값을 얻지 못합니까? 어떻게 응용 프로그램이 정적 변수를 초기화하는지 확인할 수 있습니까?
난 당신이 "정적 변수 하지들이 이전 실행에 있던 같은 값을 갖게됩니다 두 번째 발사에서"의미 같아요.
정적 변수는 앱의 수명 기간 동안 만 값을 유지할 수 있습니다. 앱이 destroyApp()
/notifyDestroyed()
으로 호출되면 값이 손실됩니다.
여러 실행에 걸쳐 상태를 유지하려면 RecordStore
을 사용하십시오.
그래, 블랙 베리 midlets는 정적 변수의 값을 유지합니다. 이것은 문제이며 문제를 해결하는 유일한 방법은 시작시 정적 값에 null 값을 할당해야한다는 것입니다. 예를 들어 정적 var가 다음과 같이 선언 된 경우 : public static String State = null; 중간 라이프 사이클에서 값은 "closed"로 설정됩니다. 그런 다음 응용 프로그램의 다음 시작시 값은 null 대신 "닫힌"상태로 유지됩니다.
이 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 명 같은 멤버가 있기 때문에)
는 RIM이 문제를 인정했다 모든 실행에 정적 변수를 초기화 이외 있습니까? 그렇다면 문제 번호는 무엇입니까? –
@DavidAndreoletti 답변에서 "Blackberry 지원 포럼의 토론"이라고 표시된 링크를 따라 갔습니까? – gnat