2011-10-23 3 views
2

내가 쓰고있는 앱에 다운로드 한 리소스를로드해야하기 때문에 question을 읽는 중입니다. 극적으로 성능이 떨어지면 궁금합니다. .apk에 포함시켜야한다. "그리고 질문에 대한"정확한 "대답은 성능 저하가 없지만, 메모리 누출을 막을 때 메모리를 다시 놓을 염려가 없다는 것을 의미합니다.Drawables는 기본적으로 메모리를 누설합니까?

누구든지 자신있게 확인하거나 거부 할 수 있습니까? 내 인상은로드 된 Drawable이 Activity가 정리되었을 때 다른 모든 것과 마찬가지로 GCed였습니다. 나는 이것이 사실이 아닌지, 그리고 그 인스턴스에서 수동으로 메모리를 수집하는 가장 확실한 방법이 무엇인지 알고 싶다.

또한 휴대 전화의 메모리와 달리 SDCard에서 이미지를로드 할 때 눈에 띄는 성능 저하가있는 경우 누구에게나 알 수 있습니까? 저는 전기 기술자가 아니므로 직관적으로 이것은 솔리드 스테이트 메모리이므로 거의 같은 속도로 읽어야합니다.하지만 확실한 답을 얻고 싶습니다.

답변

1

빠른 대답 :

비트 맵을 정리하기 위해 가비지 컬렉터의 두 개의 패스를 받아. 첫 번째 패스는 Java 객체를 해제하고 두 번째 패스는 원시 픽셀 데이터를 전달합니다. 그것들은 누출되지 않지만 포인터를 널 때와 GC가 두번째 패스를 치는 사이에 메모리가 부족할 수 있습니다. 그들이 어떤 자원에서 왔는지에 상관없이 사실입니다. 리비전()을 비트 맵으로 호출하는 것은 항상 좋은 생각입니다. 여러분과 시스템 모두가 리사이클을 완료했다는 확신이들 때입니다. 진저 브레드는 Dalvik VM의 버그로 인해 메모리 부족 문제와 비트 맵을 처리 할 때 특히 나쁩니다.

내 경험으로는 APK에서 이미지를로드하는 것이 SD 카드보다 훨씬 빠릅니다. 1) 그들은 apk에서 지퍼로 정렬되어 있습니다 (APK를 정렬 한 경우) 2) 다른 전화기는 SD 카드에 대한 액세스 시간이 다릅니다. 일반적 규칙은 SD 카드에 있으면 SLOWLY로로드된다는 것입니다. 주 스레드의 내부 메모리에서 드로어 블을로드하는 것을 잊어 버릴 수 있습니다 (나쁜 아이디어 임에도 불구하고). 메인 스레드의 SD 카드에서 아무 것도로드 할 수 없습니다. 적 : - \

이미지를로드 할 때 나는 가능한 한 게으르다. 가능한 경우 apk에 보관한다.

+0

그래서 내가 apk 외부에서로드 할 수밖에 없다고 가정하면 (이 리소스는 런타임에 리소스를 다운로드하여 사용자 정의 할 수있는 사용자 정의 가능한 응용 프로그램입니다), 응용 프로그램을 시작할 때 전화 메모리와 드로어 블에서로드하는 것이 좋습니다 확장 된 Application 클래스의 멤버입니까? (여러 액티비티가 필요할 것입니다). 대체 스레드에서 응용 프로그램이 항상 올바르게 정리되지 않는다고 말했기 때문에 이것은 메모리를 누출하는 좋은 방법 인 것처럼 보이지만 대안은 모든 활동이 실행시 자산을 다시로드하는 것입니다. –

관련 문제