2010-06-15 4 views
0

사용자가 주어진 세션에서 화면을 돌아 다니기 위해 6 ~ 100 개의 작은 비트 맵을 동적으로 생성하는 앱이 있습니다. 나는 현재 onCreate에 그들을 생성하고 SD 카드에 저장하므로 방향 변경 후 외부 저장 장치를 꺼내서 다시 표시 할 수 있습니다. 그러나 이것은 시간이 걸리고 (로딩), 빠른 접근을 위해 lifecyle 변경 사이에 비트 맵 참조를 유지하고 싶습니다.Android - 생성 된 비트 맵을 저장할 위치는 어디입니까?

제 질문은 생성 된 비트 맵을 저장하는 더 좋은 곳입니까? 나는베이스 액티비티에 정적 스토리지 라이브러리를 만들려고 생각했다. 앱이 메모리에서 완전히 제거되었을 때만 다시로드하면된다. (종료, 다른 앱에는 리소스가 필요하며 30 분 재시작 등).

이상적으로는 사용자가 제목 화면으로 돌아가서 "Resume"버튼을 클릭하고 onCreate에 저장소에서로드하는 대신 해당 비트 맵 참조에 액세스 할 수있게하고 싶습니다. 다시. 이런 이유로 나는 Activity.onRetainNonConfigurationInstance이 내가 필요한 것이라고 생각하지 않는다.

또는 생성 된 비트 맵을 여러 가지 방법으로 처리 할 수있는 방법이 있습니까?

답변

5

오리엔테이션 변경시 생성 된 비트 맵을 유지하는 방법에 대해서는 Romain Guy의 blog post을 꼭 확인하십시오. 거의 동일한 경우입니다. 그것의 요지는 onRetainNonConfigurationInstance/getLastNonConfigurationInstance을 사용하여 오리엔테이션 관련 활동 파괴를 가로 질러 임의의 객체를 전달/수신 할 수 있다는 것입니다. 하지만 이것은 활동을 떠난 다음 다시 시작하는 데 도움이되지 않습니다.

비트 맵을 정적 캐시와 유사한 개체 (가능하면 Application 클래스의 SoftReference HashMap)에 넣을 수도 있지만 Drawable 또는 Views를 저장하지 않도록 조심하십시오. 이는 포함 된 Activity를 참조하기 때문에 memory leaks이 될 수 있습니다. 이것은 전체 응용 프로그램의 수명 동안 지속되지만 전역 상태가 추악한 문제를 일으킬 수 있고 모든 것이 Activity 인스턴스를 참조하는 메모리 누수를 찾기가 어려울 수 있으므로 가능한 한 피하는 것이 좋습니다.

+0

캐시 아이디어가 흐트러지지 않을 것이라고 생각했습니다. 난 거기에 비트 맵을 넣을 뿐이므로 (컨텍스트 누출이 없음), 나는 올바른 방향으로 밀기 만하면된다고 생각합니다. 그런 다음 onRetain과 같은 모양입니다. – Josh