안녕하세요 Android가 메모리를 어떻게 관리하는지 궁금합니다. 정확한 답을 어디서도 찾을 수 없습니다. 현재 활동 스택에 5 개의 활동이있는 애플리케이션 (4 개는 중지되고 1 개는 다시 시작됨)이 있고 연결된 서비스가 없다고 가정 해 보겠습니다. 모든 활동이 중지되도록 홈 버튼을 누릅니다. 다른 메모리 소비 응용 프로그램을 시작하고 전체 장치 메모리가 부족하기 시작했습니다. 그리고 질문은
... 내 신청서는 어떻게 되나요?
- 시스템이 메모리를 복구하기 위해 내 활동 중 하나 또는 일부만 파괴 할 수 있습니까?
- 시스템이 내 응용 프로그램의 전체 프로세스를 종료합니까? 모든 활동이 멋지게 파괴됩니까?
- 응용 프로그램이 완전히 종료되었을 때 응용 프로그램으로 돌아 가면 어떻게됩니까? 처음 시작하는 것 (첫 번째 시작과 같이)에서 시작하거나 이전 상태로 활동을 복구하려고 할 것입니까? / 그렇다면 스택의 맨 위에있는 것입니까 아니면 전부입니까?
최신 정보:
이 질문을하기 전에 활동 수명주기를 몇 번 보았지만 내 질문에 대한 답변이 없습니다. 몇 가지 테스트를했고 몇 가지 답변이 있습니다. DDMS의 "프로세스 중지"는 테스트를위한 단서였습니다.
질문 1에 대한 답변을 테스트하지 않았지만 가이드에 따르면 다음과 같습니다.
활동이 일시 중지되거나 중지되면 시스템은 완료를 요청하거나 단순히 해당 프로세스를 종료하여 메모리에서 활동을 삭제할 수 있습니다.
하나 이상의 활동이 프로세스를 종료하지 않고 부드럽게 (onDestroy 메소드를 사용하여) 파괴 될 수있는 것 같습니다. 그들에게 돌아갈 때 (onCreate + bundle) 간단히 얻을 수 있습니다.
질문 2 답변 :
예. 일반적으로 시스템은 전체 프로세스를 종료합니다. 즉, 활동 및 정적 필드를 포함한 모든 데이터가 파괴됩니다. 이것은 훌륭하게 수행되지 않습니다-일시 중지 / 중지 된 활동에 대해 onDestroy 또는 finialize ()를 얻지 못할 것입니다. 이것이 saveInstanceState ()가 onPause 메소드 바로 전에 호출되는 이유입니다. onPause는 기본적으로 무언가를 저장해야하는 마지막 메소드입니다.이 메소드 후에는 onStop 또는 onDestroy를 볼 수 없기 때문입니다. 시스템은 보유하고있는 모든 객체를 파괴하는 프로세스를 종료 할 수 있습니다.
질문 3 답변 :
종료 된 애플리케이션으로 돌아 가면 어떻게됩니까?
- Android 2.2 이전-애플리케이션은 시작부터 시작되며 런처 활동으로 시작됩니다.
- 2.2부터-시스템이 이전 애플리케이션 상태를 복원합니다. 무슨 뜻인가요? 이는 마지막으로 보이는 활동이 다시 생성됨을 의미합니다 (onCreate + bundle). 활동 스택은 어떻게됩니까? 스택은 괜찮지 만 모든 활동이 죽었습니다. 뒤로 버튼으로 돌아 오면 각각이 다시 생성됩니다 (onCreate + bundle). 그것에 대해 한 가지 더 있습니다.
일반적으로 시스템은 사용자가 홈 화면에서 해당 작업을 다시 선택할 때 특정 상황에서 작업을 지 웁니다 (루트 활동 위의 스택에서 모든 활동 제거). 일반적으로 사용자가 30 분과 같은 특정 시간 동안 작업을 방문하지 않은 경우이 작업이 수행됩니다.
결론?
- android : configChanges = "orientation"으로 활동 회전 문제를 해결할 수 있다고 생각하지 마세요. 그렇게 할 때 당신은 당신이 알지도 못하는 다른 많은 문제를 얻게 될 것입니다.
- DDMS-프로세스 중지 버튼으로 애플리케이션을 테스트합니다. 이것 좀 봐
- 정적 변수를 사용할 때는주의하십시오. 활동 1에서 초기화했을 때 활동 2에서 초기화 할 것이라고 생각하지 마십시오. 전역 정적을 초기화하는 유일한 안전한 장소는 Application 클래스입니다.
- onStop 또는 onDestroy는 절대로 볼 수 없습니다. 파일 / 데이터베이스를 닫고 onPause에서 다운로더를 중지합니다. 앱이 BG에서 작업을 수행하도록하려면 포 그라운드 서비스를 사용하십시오.
그게 될 것입니다 ... 내가 내 essey를 도왔기를 바랍니다 :)