마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

메모리가 부족해지면 어플의 액티비티를 강제종료 하는것과 화면 전환할때 액티비티 종료되는건 같은 방식인가요?

0 추천

안녕하세요. 궁금증이 생겨서 문의 드립니다.

제가 알고 있기로 시스템 리소스가 부족해지면 백그라운드의 액티비티를

강제로 종료 시킨다고 알고 있는데.. 종료 이후 다시 어플을 실행했을때를 테스트 해보고 싶습니다.

(onCreate시 savedInstanceState 테스트)

그런데.. 재연을 하기가 영 쉽지 않네요.. 한참 백그라운드로 보내놓고 다른거 하다가 와도..

종료를 시키질 않는거같습니다..

그 와중에.. 화면을 전환할때도 onDestory(), onCreate() 를 실행하는걸 알게 되었고

확인해보니 savedInstanceState bundle 값이 들어와서 어영부영 테스트를 하긴 했습니다.

하긴 했는데... 실제로 강제종료가 되었을때랑 화면 전환했을때랑 같은 상황인건지.. 다른건지 잘 몰라서

영찝찝하네요 ㅠㅠ..

 

질문이 영 정리가 안된거 같은데.. 요약하자면..

1. 시스템 리소스가 모자랄때 백그라운드에 있는 액티비티를 강제 종료하고 그이후 어플을 다시 실행하면 onCreate() 되는 루틴과

     화면전환 했을때 onCreate() 되는 루틴이 같은지..

2. 만약 다른거라면 시스템 리소스가 모자랄때 백그라운드의 액티비티가 강제 종료 되는 현상을 어떤식으로 재연해야할지..

입니다.. 속 시원한 답변 해주시면 감사하겠습니다. (__)

 

다들 건승하시고 즐프하세요

마기 (210 포인트) 님이 2015년 5월 6일 질문
단순히 savedInstanceState 테스트 목적이라면 그냥 디바이스를 rotate 해 보시면 됩니다. 안드로이드 프레임웤이 액티비티를 다시 시작하게 됩니다. 뷰의 레이아웃이나 상태를 복구해주는 것이 기본 동작이므로 종료되기 전에 저장할 데이터가 있다면 적절하게 저장하셔야 겠죠. 이런 경우는 onCreate의 savedInstanceState가 null 이 아닌 상태로 넘어오게 됩니다.

1개의 답변

+2 추천
메모리가 부족하면 OS는 백그라운드에 있는 Activity만 죽일 수도 있고 프로세스 전체를 죽일 수도 있습니다.

Activity를 죽이는 것을 재현하고 싶으시면 폰의 개발자 옵션의 '액티비티 유지 안함' (폰에 따라 '활동 유지 안함')으로 되어 있는 항목을 ON시키시면 됩니다. 그러면 시스템의 모든 액티비티가 background로 들어갈때 무조건 onDestory()를 부르며 종료하게 되어 메모리 부족 테스트를 할 수 있습니다.

그리고 이 옵션을 키면 백그라운드로 들어갔다 나올 때 죽는 앱을 부지기수로 목격하게 되실겁니다. 많은 앱들이 앱의 lifecycle 처리를 안한다는 말이죠

프로세스 전체를 죽이는 방법은,

우선 폰 USB 연결하고 테스트할 앱을 띄우고 테스트를 원하는 화면으로 이동합니다. 그리고, 홈버튼을 눌러 액티비를 백그라운드로 보냅니다.

다음은 PC로 와서 DDMS등에서 그 프로세스를 kill해버립니다. 그리고 폰으로 돌아와 앱을 다시 띄웁니다. 이 때 정상적으로 동작하면 lifecycle처리가 올바로 된 것입니다. 에뮬이나 루팅폰은 아무 프로세스나 kill할 수 있지만 루팅안한폰은 개발중인 앱만 죽일 수 있을 겁니다.
레오나 (3,290 포인트) 님이 2015년 5월 6일 답변
애플리케이션 설정 화면에서 강제 종료를 누르면 adb를 쓰지 않고도 앱을 강제 종료할 수 있습니다. 서드파티 앱은 100% 가능합니다.
설정화면 강제종료는 앱 상태 자체를 리셋시키는 것으로 알고 있습니다. 후에 다시 그 앱을 띄우면 백그라운드 액티비티가 복원되는 것이 아니라 처음 액티비티로 돌아갑니다.
명쾌한 답변 정말 감사드립니다. (__)
...