내 응용 프로그램에서 정적 변수를 사용하여 현재 사용자 ID를 보유합니다. 단순히 사라지는이 사용자 ID를 재현하기가 매우 어려운 버그가 있습니다. 이 변수가 응용 프로그램로드 중이 변수가 설정되는 방법과 관련된 버그 일 수 있지만 (제어 된 환경에서이 상황을 안정적으로 재현 할 수 없었기 때문에 어떤 일이 발생하는지 정확히 알 수는 없습니다), 시작하고 있습니다. 이것은 메모리가 정적 변수로부터 어떻게 회수되는지와 관련이 있다고 생각합니다 (이전에 고려하지 않은 것).안드로이드에서 정적 변수 및 메모리 부족 - 몇 가지 질문
내 정적 변수는 언제 사라질 수 있습니까?
- 내가 알고있는 한, OS가 메모리 부족을보고하면 정적 메모리가 재생 될 수 있습니다. 앱이 포 그라운드에있는 동안 발생할 수 있습니까? 아니면 배경 만?
- 정적 메모리가 메모리 부족 상태없이 재생 될 수있는 방법이 있습니까? 나는 변수가 백그라운드로 가지 않고도 가끔씩 사라지는 것 같고 어떤 낮은 메모리 이벤트도 발생하지 않을 것이라고 생각한다. (AFAIK 낮은 메모리는 전체 OS가 아니라 앱의 메모리를 의미한다.)
- 무엇을 좋은 방법으로 시뮬레이트 할 수 있는가? 정적 변수는 운영 체제가 응용 프로그램의 작동 방식을 확인하고 버그를 수정하기 위해 회수됩니다.
내 이해에 더 많은 명확성을 추가하는 것은 무엇이든 감사 할 것입니다.
감사합니다.
최근에 개발자는 정적 변수 및 블록 주제를 접하는 Android Developers 'Hangout'을 운영했습니다. 그들은 당신의 질문에 구체적으로 대답하지는 않지만 일반적으로 정적 변수를 사용하여 정보를 전달하는 것을 피하도록 노력해야한다는 합의에 따라 춤을 추고 있습니다. 동영상 링크 : http://youtu.be/z1Gk5XUVLuE?t=17m –
또한 귀하의 글 머리 기호에 답변을 드리고 싶지만보다 구체적인 내용을 찾을 수 없습니다. 결국 상수가 아니라면 정적을 사용하지 않도록 코드를 재구성하려고했습니다. 또한 "non-persistent objects"에 대해서만 정적 필드를 사용하도록 제안하는 안드로이드 [FAQ] (http://developer.android.com/resources/faq/framework.html#3)가 있습니다. –
ID가 설정되어 있는지 먼저 확인하고 그렇지 않으면 초기화하는 getter를 사용하는 것이 어떻습니까? –