2011-08-23 3 views
5

이해 한대로 방향 변경시 새로운 방향에 대한 Android 활동이 재생성됩니다.Android에서 방향 변경에 대한 일부 데이터 저장

방향 변경시 원래 방향에서 일부 데이터를 저장/저장하는 방법이 있습니까?

일부 비트 맵을 저장하고 싶습니다. 따라서 방향 변경시 다시로드 할 필요가 없습니다.

답변

12

정적 변수/클래스를 사용하면 유지 관리 및 디버깅면에서 좋지 않은 접근 방식입니다.


나는 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 패키지를 통해 이전 버전과 호환됩니다.

Fragment.setRetainInstance

+0

오른쪽, 내 1 점 당신에게 :) – darma

+0

@Pedro Loureiro하지만 이것은 액티비티에서는 효과가없고, 단편 일뿐입니다. 맞습니까? –

0

활동을 실행중인 프로세스는 다시 시작되지 않습니다. Android 프레임 워크는 활동의 새로운 인스턴스를 만듭니다. 따라서 가장 간단한 솔루션으로 데이터를 정적 변수에 저장할 수 있습니다.

+0

그래서, 기본적으로 정적으로 변수를 만들어 널 (null)로 초기화 할 수있다. 그런 다음 null 검사를 수행하고 null이 아닌 경우 다시 사용하고 null 인 경우로드합니다. 옳은? –

+1

정적 변수 저장에주의하십시오. 당신은 Romain Guy의 매우 흥미로운 기사를 읽을 것입니다 : http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/ – darma

+0

네, 맞습니다. darma가 지적한대로 –

5

상위 활동 또는 정적 유틸리티 클래스에 항목을 저장하십시오.

그렇지 않으면 매니페스트를 사용하여 화면 크기 변경 활동을 파괴하지 않도록 앱에 알릴 수 있습니다. 이 기사를 확인하십시오 : http://developer.android.com/guide/topics/resources/runtime-changes.html

+0

감사합니다. 많이 도움이되었습니다. 지금 제 문제를 해결할 수 있다고 생각합니다. :-) 몇 분 안에 답을 표시 할 것입니다. –

+0

잘 도와 줘서 고마워. – Noah

1

실제로이 주제를 다루는 Android 개발자 사이트에 아주 좋은 기사가 있습니다.

T-Mobile G1과 같은 일부 장치는 런타임에 하드웨어 구성을 변경할 수 있습니다. 예를 들어, 키보드를 열면 화면이 세로 방향에서 가로 방향으로 변경됩니다.

Android 앱 개발을 쉽게하기 위해 Android 시스템 이 자동으로 구성 변경 이벤트를 처리하고 현재 활동을 새 구성으로 다시 시작합니다.

[...]

응용 프로그램 실행시 장치의 구성에 자동으로 적응하기 때문에이 문제가 정말 강력하지만

, 그것은 때로는 자신의 활동이 왜 궁금 새로운 안드로이드 개발자에 대한 혼란이다 파괴되고 재창조되었다. 이 직면

"문제는,"일부 개발자가 일반적이다 자신을 변화 구성을 처리하기 위해 선택 는 나중에 자신의 삶을 복잡하게하는 단기 솔루션입니다.

[...]

The full article.

0

당신 된 SharedPreferences를 사용하여 시도 할 수 있습니다 :

editor edit = preferences.edit(); edit.putString("username", "new_value_for_user"); edit.commit();