2013-08-08 3 views
3

Android 이외의 방식으로 구현 된 대형 Android 앱을 상속 받았습니다. 이 앱에는 수십 개의 활동이 있으며 데이터 캐싱을 위해이 앱을 싱글 톤으로 사용합니다. 앱이 오랜 시간 동안 유휴 상태가 된 후에 충돌합니다. 기기가 하나의 활동에 있거나 앱 메뉴의 최근 기록에서 다시 시작될 때 발생할 수 있습니다 (보통 null 참조 문제).Android - 배경 앱이 메모리 및 기타 리소스를 모두 비우도록합니다.

내 질문에 - 기술이 있습니까? 또는 운영 체제가 메모리를 회수하기를 기다리지 않고 리소스 해제 동작을 충실하게 강제하기위한 도구입니까?

답변

1

기기의 개발 옵션 아래에서 프로그램을 실행하려면 Don't keep Activities을 입력하십시오. 그러나 이것은 Application 클래스의 싱글 톤 스토리지를 다루지는 않습니다. 응용 프로그램 클래스는 응용 프로그램이 완전히 메모리 부족한 경우에만 처리됩니다.

+0

괜찮습니다. 앱의 모든 활동이 시작 프로그램 활동으로 설정된 경우 앱을 올바르게 시작할 수 있어야한다고 말하는 것이 맞습니까? 그 상태의 앱이 단순히 "필요한 리소스 중 일부가 null 인 경우 - 정상적인 런처 활동 (로그인)을 시작하는 것이 더 좋다"를 감지하더라도? 초기화되지 않은 앱 리소스를 다루는 활동의 능력을 테스트합니다. – jchristof

+0

모든 활동은 주를 유지해야하며 요청시 시작할 수 있어야합니다. 리소스가 누락 된 경우 (즉, 대용량 데이터 구조) 활동은 리소스를 다시로드하거나 정상적으로 폴백 할 수 있어야합니다. 그 말이 당신이 말한 것과 정확히 같아요. 액티비티가 액세스 권한을 상실한 중요한 정보를 표시하는 경우이 정보를로드하는 방법, 즉 로그인 화면을 알고있는 활동으로 리디렉션해야합니다. 현명하게 사용되는 싱글 톤은 앱의 응답 성을 향상시키고 개발을 다소 덜 복잡하게 만들 수 있습니다. 그러나 추가 유지 관리 비용이 발생합니다. – 323go

0

첫째, 보존해야하는 상태 데이터가있는 경우 기본 제공 라이프 사이클 메소드를 사용하고 캐싱 동작을 Application 클래스 밖으로 가져와야합니다. savedInstanceState BundleParcelable 인터페이스를 사용하십시오.

액티비티가 진행되면서 리소스가 파손되는 것을 방지하기 위해 할 수있는 몇 가지 작업이 있습니다. onDestroy() (또는 조각이있는 경우 onDestroyView())에서 모든 멤버 변수를 null로 설정합니다. 다른 활동에 대한 참조를 피하십시오. Android는 라이프 사이클 메소드를 호출하고 메모리를 회수하려고 시도합니다. 동일한 활동의 ​​새 인스턴스가 나중에 생성 될 수 있지만 이전 참조가 여전히 가리키고 있기 때문에 남아있을 수 있습니다.