중인 Android 파괴 활동, 프로세스 중지




안드로이드 앱 종료 (2)

먼저 이것 좀보세요 :

onPause () 시스템이 이전 활동을 다시 시작하려고 할 때 호출됩니다. 일반적으로 저장되지 않은 변경 사항을 영구 데이터에 적용하고 CPU 등을 소모하는 애니메이션 및 기타 작업을 중지하는 데 사용됩니다.이 방법의 반환은이 메서드가 반환 될 때까지 다음 작업이 다시 시작되지 않으므로 매우 빠릅니다. 액티비티가 전면으로 돌아 오면 onResume (), 사용자가 보이지 않게되면 onStop ()을 따라옵니다.

onStop () 다른 활동이 다시 시작되어이 활동을 다루고 있기 때문에 활동이 사용자에게 더 이상 보이지 않을 때 호출됩니다. 이것은 새로운 활동이 시작되고, 기존 활동이 시작되거나 현재 활동이 파괴되기 때문에 발생할 수 있습니다. 이 활동이 사용자와 상호 작용하기 위해 돌아 왔으면 onRestart () 또는이 활동이 사라지면 onDestroy ()가 계속됩니다.

따라서 장치의 "홈"버튼을 누르면 현재 포 그라운드 활동이 onPause() , onStop() , 다른 4 개는 onStop() 상태로 유지됩니다.

Google의 문서에 따르면

  • 화면의 전경 (스택 맨 위에 있음)에 활동이 있으면 활성 또는 실행 중입니다.
  • 활동이 초점을 잃어 버렸지 만 계속 표시되면 (즉, 전체 크기가 아닌 투명 활동이 활동 상단에 집중된 경우) 활동이 일시 중지됩니다. 일시 중지 된 활동은 완전히 살아 있습니다 (모든 상태 및 구성원 정보를 유지하고 창 관리자에 연결되어 있음). 극도의 메모리 부족 상황에서 시스템에 의해 종료 될 수 있습니다.
  • 활동이 다른 활동에 의해 완전히 가려지면 활동이 중지됩니다. 여전히 모든 상태와 구성원 정보를 유지하지만 더 이상 사용자가 볼 수 없으므로 창을 숨기고 다른 곳에서 메모리가 필요할 때 시스템에 의해 종종 종료됩니다.
  • 활동이 일시 중지되거나 중지 된 경우, 시스템은 활동 요청을 완료하거나 단순히 프로세스를 종료함으로써 메모리에서 활동을 삭제할 수 있습니다. 사용자에게 다시 표시되면 완전히 다시 시작하고 이전 상태로 복원해야합니다.

또한 프로세스 수명주기 동안 :

프로세스 수명주기 3. 백그라운드 활동 (사용자가 볼 수없고 일시 중지 된 활동)은 더 이상 중요하지 않으므로 시스템은 다른 전경 또는 보이는 프로세스에 대한 메모리를 회수하기 위해 프로세스를 안전하게 종료 할 수 있습니다. 프로세스를 종료해야하는 경우 사용자가 다시 액티비티로 이동하여 다시 화면에 표시하면 onSaveInstanceState (Bundle)에서 이전에 제공 한 savedInstanceState와 함께 onCreate (Bundle) 메서드가 호출되어 사용자가 마지막으로 떠난 것과 같은 상태에서 스스로 다시 시작할 수 있습니다.

위의 인용은 모두 Android 개발자 참조 : 활동

시스템이 비 메모리 활동을 파괴하고 메모리 소비 응용 프로그램을 시작할 때 추억을 재활용 할 수 있음이 확인되었습니다. 그리고 당신은 당신의 활동에 isFinishing() 을 구현 한 다음 DDMS에서 "kill"버튼을 사용하여 시스템에 의해 삭제되는 활동을 탐지 할 수 있습니다. 그러나 나는 시스템이 가장 오래된 것을 먼저 파괴 할 것이라고 생각한다. 그러나 "Launch Activity"가 재활용되었을 때 다른 활동을 유지하는 것이 중요하지 않습니다.

최신 정보

다음은 here 에서 발견 한 몇 가지 의견입니다.

정지 상태

액티비티가 보이지 않지만 메모리에 남아있는 경우, 액티비티가 중지 된 상태라고합니다. 중지 된 활동을 다시 실행 활동으로 만들 수 있습니다. 또는 메모리에서 삭제되어 제거 될 수 있습니다.

시스템은 정지 된 상태에서 활동을 계속 유지하기 때문에 사용자는 여전히 언젠가는 다시 그 활동으로 돌아가고 정지 된 활동을 재시작하는 것은 처음부터 활동을 시작하는 것보다 훨씬 저렴합니다. 왜냐하면 우리는 이미 모든 객체를 메모리에로드했기 때문에 모든 객체를 포 그라운드로 가져와야하기 때문입니다.

중지 된 활동은 언제든지 메모리에서 제거 할 수 있습니다.

안녕하세요, 안드로이드가 메모리를 어떻게 관리하고 있는지 궁금합니다. 정확한 답변을 찾을 수 없습니다. 현재 활동 스택에 5 개의 활동이있는 응용 프로그램이 있다고 가정합니다 (4 개가 중지되고 1 개가 다시 시작됨). 연결된 서비스가 없습니다. HOME 버튼을 누르면 모든 활동이 중단됩니다. 다른 메모리를 사용하는 응용 프로그램을 시작하고 전반적인 장치 메모리가 부족하기 시작합니다. 그리고 질문은

... 신청서는 어떻게됩니까?

  1. 시스템이 메모리를 복구하기 위해 내 활동 중 하나 또는 일부만 파괴 할 수 있습니까?
  2. 시스템이 내 애플리케이션의 전체 프로세스를 중단시킬 수 있습니까? 모든 활동이 훌륭하게 파괴 될 것인가?
  3. 완전히 살해되었을 때 신청서로 돌아 가면 어떻게됩니까? 처음 시작할 때처럼 처음부터 시작 할 것인가 아니면 선취 상태로 활동을 복구하려고 할 것인가? 그렇다면 스택 맨 위에있는 스택인가 아니면 전부입니까?

최신 정보:

이 질문을하기 전에 활동 라이프 사이클을 몇 번 본 적이 있지만 내 질문에 대한 답변이 없습니다. 나는 몇 가지 검사를했고 나는 몇 가지 해답을 가지고있다. DDMS에서 "프로세스 중지"는 테스트를위한 단서였습니다.

질문 1에 대한 답을 테스트하지는 않았지만 가이드에 따르면 :

활동이 일시 중지되거나 중지 된 경우, 시스템은 활동 요청을 완료하거나 단순히 프로세스를 종료함으로써 메모리에서 활동을 삭제할 수 있습니다.

하나 이상의 활동이 프로세스를 죽이지 않고 부드럽게 (onDestroy 메소드로) 파괴 될 수 있습니다. 다시 얻을 때 (onCreate + bundle) 얻을 수 있습니다.

질문 2 답변 :

예. 일반적으로 시스템은 전체 프로세스를 죽입니다. 즉, 활동 및 정적 필드를 포함한 모든 데이터가 파괴됩니다. 이것은 훌륭하게 수행되지 않습니다. 일시 중지 / 중지 된 활동에 대해 onDestroy 또는 finialize ()를 사용하지 마십시오. 이것이 onPause 메소드 바로 전에 saveInstanceState ()가 호출되는 이유입니다. onPause는 기본적으로 onStop 또는 onDestroy를 결코 볼 수 없기 때문에 무언가를 저장해야하는 마지막 방법입니다. 시스템은 모든 물건을 파괴하는 과정을 죽일 수 있습니다.

질문 3 답변 :

죽은 응용 프로그램으로 돌아 가면 어떻게됩니까?

  • Android 2.2 이전 버전 - 시작 프로그램은 시작 프로그램 활동과 함께 시작되었습니다.
  • 2.2에서 시작 - 시스템은 이전 응용 프로그램 상태를 복원합니다. 무슨 뜻이에요? 마지막 가시적 인 활동이 재 작성된다는 것을 의미합니다 (onCreate + bundle). 액티비티 스택은 어떻게됩니까? 스택은 괜찮지 만 스택의 모든 활동은 죽었습니다. 각각의 버튼은 다시 버튼으로 다시 돌아올 때 다시 생성됩니다 (onCreate + bundle). 그것에 대해 한 가지 더 있습니다.

일반적으로 사용자가 홈 화면에서 해당 작업을 다시 선택하면 특정 상황에서 시스템이 작업을 지 웁니다 (루트 활동 위의 스택에서 모든 활동을 제거). 일반적으로 사용자가 일정 시간 (예 : 30 분) 동안 작업을 방문하지 않은 경우이 작업이 수행됩니다.

결론?

  1. 액티비티 회전 문제를 처리하는 것이 android : configChanges = "orientation"에 의해 해결 될 수 있다고 생각하지 마십시오. 그렇게하면 당신도 알지 못하는 많은 다른 문제가 발생할 것입니다.
  2. DDMS - 프로세스 중지 버튼으로 응용 프로그램을 테스트하십시오. 이것 좀 봐
  3. 정적 변수를 사용할 때는주의하십시오. 액티비티 1에서 액티비티를 초기화 할 때 액티비티 2에서 초기화시키지 않을 것이라고 생각하지 마십시오. 글로벌 스태틱을 초기화하는 유일한 안전한 곳은 애플리케이션 클래스입니다.
  4. onStop 또는 onDestroy는 절대로 볼 수 없다는 것을 기억하십시오. 파일 / 데이터베이스를 닫고 onPause에서 다운로더를 중지하십시오. 앱이 BG에서 무언가를하기를 원할 때 - 전경 서비스를 사용하십시오.

그게 ... 내 essey와 함께 도움이 되었으면 좋겠다. :)


시스템이 메모리를 복구하기 위해 내 활동 중 하나 또는 일부만 파괴 할 수 있습니까?

예. Android는 메모리가 필요할 때 백그라운드에서 실행되는 활동을 중지합니다. 하나 또는 모두를 죽이는 것은 어떤 조건에 달려 있습니다. 일시 중지되거나 중지 된 인스턴스의 경우 안드로이드가 활동 또는 프로세스 자체를 종료 할 수 있습니다. 여기 활동 라이프 사이클 에서 아래 사항을 얻을 수 있습니다. 나는 그 페이지를 완전히 통과 할 것을 권한다. 의심의 여지가 분명히 없어집니다.

활동이 초점을 잃어 버렸지 만 계속 표시되면 (즉, 전체 크기가 아닌 투명 활동이 활동 상단에 집중된 경우) 활동이 일시 중지됩니다. 일시 중지 된 활동은 완전히 살아 있습니다 (모든 상태 및 구성원 정보를 유지하고 창 관리자에 연결되어 있음). 극도의 메모리 부족 상황에서 시스템에 의해 종료 될 수 있습니다.

활동이 다른 활동에 의해 완전히 가려지면 활동이 중지됩니다. 여전히 모든 상태와 구성원 정보를 유지하지만 더 이상 사용자가 볼 수 없으므로 창을 숨기고 다른 곳에서 메모리가 필요할 때 시스템에 의해 종종 종료됩니다.

활동이 일시 중지되거나 중지 된 경우, 시스템은 활동 요청을 완료하거나 단순히 프로세스를 종료함으로써 메모리에서 활동을 삭제할 수 있습니다. 사용자에게 다시 표시되면 완전히 다시 시작하고 이전 상태로 복원해야합니다.

시스템이 내 애플리케이션의 전체 프로세스를 중단시킬 수 있습니까? 모든 활동이 훌륭하게 파괴 될 것인가?

프로세스는 활동 그룹과 관련되는 반면, 활동은 개인과 관련됩니다. 위의 세 번째 점을 다시 살펴보면 언급 한대로 프로세스가 종료됩니다.

완전히 살해되었을 때 신청서로 돌아 가면 어떻게됩니까?

다시 시작하는 것과 비슷합니다. 다시 세 번째 요점은 사용자에게 When it is displayed again to the user, it must be completely restarted and restored to its previous state 와 같이 몇 가지 대답을 줄 When it is displayed again to the user, it must be completely restarted and restored to its previous state

here 에 메모리 관련 정보에 대한 더 많은 정보를 얻으십시오.

편집하다:
응용 프로그램의 모든 활동은 단일 프로세스에서 실행됩니다. 따라서 프로세스가 종료되면 5 또는 10에 상관없이 모든 활동이 종료됩니다. 즉 다시 시작됩니다. 다시 시작하면 응용 프로그램이 저장된 상태가 처음부터 시작됩니다.





android-activity