이해 한대로 방향 변경시 새로운 방향에 대한 Android 활동이 재생성됩니다.Android에서 방향 변경에 대한 일부 데이터 저장
방향 변경시 원래 방향에서 일부 데이터를 저장/저장하는 방법이 있습니까?
일부 비트 맵을 저장하고 싶습니다. 따라서 방향 변경시 다시로드 할 필요가 없습니다.
이해 한대로 방향 변경시 새로운 방향에 대한 Android 활동이 재생성됩니다.Android에서 방향 변경에 대한 일부 데이터 저장
방향 변경시 원래 방향에서 일부 데이터를 저장/저장하는 방법이 있습니까?
일부 비트 맵을 저장하고 싶습니다. 따라서 방향 변경시 다시로드 할 필요가 없습니다.
정적 변수/클래스를 사용하면 유지 관리 및 디버깅면에서 좋지 않은 접근 방식입니다.
나는 Activity.onRetainNonConfigurationInstance
을 사용하고 있지만 난 그냥 지금은 (아마도 벌집 이후 이상)는 지원되지 않습니다 것을 알아 냈다. Activity.onRetainNonConfigurationInstance
이 방법을 사용하면 Activity.getLastNonConfigurationInstance
을 호출하여 onRetainNonConfigurationInstance
에 반환 한 동일한 개체를 검색하면됩니다. null을 확인하고 올바른 클래스로 캐스트하십시오 (클래스를 반환하거나 가져올 수 있음).Activity.getLastNonConfigurationInstance
의사 코드의 샘플 사용은 다음과 같습니다 당신이 2.x.x까지 표적으로하는 경우
onRetainNonConfigurationInstance:
return "I need to remember this next time";
onCreate:
...
String messageToShow = null;
Object data = getLastNonConfigurationInstance();
if(data != null)
messageToShow = (String)data;
else
messageToShow = "Nothing to show";
그래서, 당신이 방법을 사용할 수 있습니다. 그렇지 않으면 Fragment.setRetainInstance
을 사용할 것을 권장합니다. 이는 compability 패키지를 통해 이전 버전과 호환됩니다.
활동을 실행중인 프로세스는 다시 시작되지 않습니다. Android 프레임 워크는 활동의 새로운 인스턴스를 만듭니다. 따라서 가장 간단한 솔루션으로 데이터를 정적 변수에 저장할 수 있습니다.
그래서, 기본적으로 정적으로 변수를 만들어 널 (null)로 초기화 할 수있다. 그런 다음 null 검사를 수행하고 null이 아닌 경우 다시 사용하고 null 인 경우로드합니다. 옳은? –
정적 변수 저장에주의하십시오. 당신은 Romain Guy의 매우 흥미로운 기사를 읽을 것입니다 : http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/ – darma
네, 맞습니다. darma가 지적한대로 –
상위 활동 또는 정적 유틸리티 클래스에 항목을 저장하십시오.
그렇지 않으면 매니페스트를 사용하여 화면 크기 변경 활동을 파괴하지 않도록 앱에 알릴 수 있습니다. 이 기사를 확인하십시오 : http://developer.android.com/guide/topics/resources/runtime-changes.html
감사합니다. 많이 도움이되었습니다. 지금 제 문제를 해결할 수 있다고 생각합니다. :-) 몇 분 안에 답을 표시 할 것입니다. –
잘 도와 줘서 고마워. – Noah
실제로이 주제를 다루는 Android 개발자 사이트에 아주 좋은 기사가 있습니다.
T-Mobile G1과 같은 일부 장치는 런타임에 하드웨어 구성을 변경할 수 있습니다. 예를 들어, 키보드를 열면 화면이 세로 방향에서 가로 방향으로 변경됩니다.
Android 앱 개발을 쉽게하기 위해 Android 시스템 이 자동으로 구성 변경 이벤트를 처리하고 현재 활동을 새 구성으로 다시 시작합니다.
[...]
응용 프로그램 실행시 장치의 구성에 자동으로 적응하기 때문에이 문제가 정말 강력하지만, 그것은 때로는 자신의 활동이 왜 궁금 새로운 안드로이드 개발자에 대한 혼란이다 파괴되고 재창조되었다. 이 직면
"문제는,"일부 개발자가 일반적이다 자신을 변화 구성을 처리하기 위해 선택 는 나중에 자신의 삶을 복잡하게하는 단기 솔루션입니다.
[...]
당신 된 SharedPreferences를 사용하여 시도 할 수 있습니다 :
editor edit = preferences.edit(); edit.putString("username", "new_value_for_user"); edit.commit();
오른쪽, 내 1 점 당신에게 :) – darma
@Pedro Loureiro하지만 이것은 액티비티에서는 효과가없고, 단편 일뿐입니다. 맞습니까? –