2011-10-14 2 views
3

내 응용 프로그램에서 정적 변수를 사용하여 현재 사용자 ID를 보유합니다. 단순히 사라지는이 사용자 ID를 재현하기가 매우 어려운 버그가 있습니다. 이 변수가 응용 프로그램로드 중이 변수가 설정되는 방법과 관련된 버그 일 수 있지만 (제어 된 환경에서이 상황을 안정적으로 재현 할 수 없었기 때문에 어떤 일이 발생하는지 정확히 알 수는 없습니다), 시작하고 있습니다. 이것은 메모리가 정적 변수로부터 어떻게 회수되는지와 관련이 있다고 생각합니다 (이전에 고려하지 않은 것).안드로이드에서 정적 변수 및 메모리 부족 - 몇 가지 질문

내 정적 변수는 언제 사라질 수 있습니까?

  • 내가 알고있는 한, OS가 메모리 부족을보고하면 정적 메모리가 재생 될 수 있습니다. 앱이 포 그라운드에있는 동안 발생할 수 있습니까? 아니면 배경 만?
  • 정적 메모리가 메모리 부족 상태없이 재생 될 수있는 방법이 있습니까? 나는 변수가 백그라운드로 가지 않고도 가끔씩 사라지는 것 같고 어떤 낮은 메모리 이벤트도 발생하지 않을 것이라고 생각한다. (AFAIK 낮은 메모리는 전체 OS가 아니라 앱의 메모리를 의미한다.)
  • 무엇을 좋은 방법으로 시뮬레이트 할 수 있는가? 정적 변수는 운영 체제가 응용 프로그램의 작동 방식을 확인하고 버그를 수정하기 위해 회수됩니다.

내 이해에 더 많은 명확성을 추가하는 것은 무엇이든 감사 할 것입니다.

감사합니다.

+0

최근에 개발자는 정적 변수 및 블록 주제를 접하는 Android Developers 'Hangout'을 운영했습니다. 그들은 당신의 질문에 구체적으로 대답하지는 않지만 일반적으로 정적 변수를 사용하여 정보를 전달하는 것을 피하도록 노력해야한다는 합의에 따라 춤을 추고 있습니다. 동영상 링크 : http://youtu.be/z1Gk5XUVLuE?t=17m –

+0

또한 귀하의 글 머리 기호에 답변을 드리고 싶지만보다 구체적인 내용을 찾을 수 없습니다. 결국 상수가 아니라면 정적을 사용하지 않도록 코드를 재구성하려고했습니다. 또한 "non-persistent objects"에 대해서만 정적 필드를 사용하도록 제안하는 안드로이드 [FAQ] (http://developer.android.com/resources/faq/framework.html#3)가 있습니다. –

+0

ID가 설정되어 있는지 먼저 확인하고 그렇지 않으면 초기화하는 getter를 사용하는 것이 어떻습니까? –

답변

0

정적 변수는 데이터를 저장하는 가장 좋은 방법 중 하나가 아니기 때문에 현재 사용자 ID를 보유하기 위해 정적 변수를 사용하지 않는 것이 좋습니다 (사용자 ID는 앱의 모든 세션에 남아있는 데이터로 가정합니다. 사용자가 로그 아웃 한 경우 제외).

가장 간단한 방법은 공유 환경 설정을 이용하는 것입니다. Android Data Storage을보고 Android에 데이터를 저장하는 최상의 방법을 읽어보십시오.

필요에 따라 SharedPreferences으로 가야합니다. 더 이상 문제가 없으며 OS에서 회수 한 변수를 시뮬레이션 할 필요도 없습니다.

+0

나는 이미 공유 환경 설정을 사용 중이며 로더 활동의 onCreate에서 정적으로 ID를로드하고 있습니다. 그러나 OS가 죽은 다음 응용 프로그램을 복원 할 때 Loader가 우회하여 스택의 마지막 활동이 시작되는 것을 볼 수 있습니다. 어느 쪽이든, 위의 답변에 대한 내 글 머리 기호를 얻고 싶습니다. –

+0

@ 크리스티 노 세티 야디 : "응용 프로그램 확장"은 어떻습니까? 그게 안전한 방법이고 "정적"보다 낫지? – Ashwin

1

이 질문은 super, super old입니다. 그러나 저는 블로그 게시물을 쓰고 이것을보고했습니다. 이 앱을 계속 사용하고 있는지 (의심스러운), 또는 여전히이 문제 (의심스러운 경우)가 계속 표시되는지는 알 수 없습니다. 내 생각 엔 앱이 시작되는 활동에서 이러한 통계를 설정하는 것입니다. 물론, 앱이 종료 된 후 다시 시작되면 해당 활동을 수행하지 않습니다.

지연 성 정적 또는 사용자 지정 Application 개체에서 초기화하는 것이 일반적으로 처리됩니다.

"저 메모리에서 제거 된 정적"아이디어에 대해 상당한 양의 연구를 수행했으며 기본적인 대답은 발생하지 않는다는 것입니다. 이제까지.