최근 앱 목록에서 앱을 스 와이프하면 실제로 어떻게됩니까?


147

Ice Cream Sandwich의 최근 앱 목록은 앱을 목록에서 스 와이프하여 영구적으로 해제하는 기능을 추가했습니다 (내가 CM / 사용자 정의 ROM이 아닌 바닐라 기능이라는 것을 아는 한). 설명서 및 플랫폼의 주요 내용은이 기능의 실제 작동을 다루지 않는 것 같지만 시스템이 실제로 무엇을하고 있는지 궁금합니다.

호기심을 더하기 위해 빠른 테스트를하기로 결정했습니다. CM9 설치에서 음악을 시작한 다음 지원을 중단했습니다. 그런 다음 최근 앱 목록을 확인하고 실제로 (축소판 그림에 따라 올바른 상태) 있음을 확인했습니다. 그런 다음 Settings->ApplicationsMusic 앱을 시작 하고 강제로 중지했지만 여전히 최신 목록에 표시되어 백그라운드에서 느린 프로세스와 관련이 없다고 생각합니다.

음악이 좋지 않은 선택 이었음을 깨닫고 USA 투데이 앱으로 테스트했습니다. 이것은 기본적으로 동일한 동작을 보였으며 최근 앱 목록의 축소판이이를 반영하지는 않았지만 강제 종료 후 "다시 시작"해야하는 것처럼 보였습니다 (캐시, 추측 중입니까?).

그렇다면 최근 목록에서 앱을 스 와이프하면 OS 수준에서 실제로 어떤 일이 발생합니까? 단순히 RAM에서 앱의 데이터를 지우고 가비지를 수집하여 저장된 상태를 파괴합니까?

답변:


68

최근 앱 목록에서 앱을 스 와이프하는 것은 바닐라이며 문서화가 잘되어 있지 않습니다. 이것은 다양한 안드로이드 포럼에 대한 상당한 토론 주제였습니다 ... 여론은 일부 의견에서 가장 잘 설명 된 것 같습니다 : 행동은 앱을 닫는 것과 유사하지만 정확하게 동일하지는 않습니다 (일반적으로 ( 명시적인 뒤로 버튼 처리를 정의하지 않은 앱의 경우) 종료 한 응용 프로그램 내에서 충분한 시간을 되 돌리는 것과 같습니다.

링크에는 세부 사항에 대한 자세한 내용이 있지만 전반적으로 응용 프로그램을 종료하는 것으로 생각할 수 있습니다.

Music 앱과 관련하여 서비스를 시작한다고 생각하므로 작업 자체 (Music app / UI)가 닫히는 동안 서비스는 백그라운드에서 계속 실행되므로 작업 때문에 음악이 갑자기 중지되지 않습니다. 메모리 관리상의 이유로 지워졌습니다. 그것은 당신이 본 것에 영향을 미쳤을 것입니다.


1
고맙게도, 그 링크에는 많은 토론이 있습니다. 당신은 또한 다시 올 수 있습니다 : 음악, 테스트가 좋지 않았을 수 있습니다. 차기 위해 다른 앱을 사용해 볼게요.
eldarerathis

2
계속 진행하여 레딧 토론이 나를 좀 더 나은 검색 용어를 찾아 도움, 나는에서 언급 다이앤 Hackborn에 의해 일부 게시물에 의해 뒷받침 될 듯하기 때문에 이것을 받아 들일 것 내 대답 . 감사!
eldarerathis


1
고마워요! 나에게이 게시물이 도움이되었다 : reddit.com/r/Android/comments/mpevh/…
Boris Strandjev

백그라운드에서 서비스가 실행되고 음악을 시작하려면 앱을 열거 나 위젯에서 다시 재생해야하는 경우에도 최근 플레이어 목록에서 앱을 스 와이프하면 Rocket Player와 같은 타사 음악 플레이어가 음악을 중지합니다.
Lucky

78

Google 직원의 설명을 이끌어내는 마법의 검색어를 찾은 것 같습니다. 특히 Dianne Hackborn이 최근 목록에서 무언가를 스 와이프하면 어떻게되는지 설명하는 몇 가지 다른 장소를 발견했습니다. 첫 번째는 Google+ 게시물 중 하나에 대한 의견입니다 .

[W] 특히 최근 작업을 스 와이프하면 모자가 발생합니다. (1) 응용 프로그램의 백그라운드 또는 빈 프로세스를 종료합니다 ( http://developer.android.com/guide/topics/fundamentals/processes-and- threads.html # 라이프 사이클의 의미) 및 (2) 새로운 http://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent) API를 사용하여 제거되는 작업에 대한 응용 프로그램 서비스를 통해 적절하다고 생각되는 모든 작업을 수행 할 수 있습니다.

그녀는 또한 블로그 주석에 메모합니다 .

실제로 최근 작업에서 항목을 제거하면 프로세스에 존재하는 백그라운드 프로세스가 종료됩니다. 서비스가 직접 중지되지는 않지만, 서비스를 중지해야하는지 여부를 결정하기 위해 작업이 제거되었는지 확인하는 API가 있습니다. 따라서 전자 메일 앱의 최근 작업을 제거해도 전자 메일 확인이 중지되지 않습니다.

앱을 완전히 중지하려면 최근 작업을 길게 눌러 앱 정보로 이동 한 다음 강제 중지를 누르십시오. 중지는 앱을 완전히 종료하는 것입니다. 모든 프로세스가 종료되고 모든 서비스가 중지되고 모든 알림이 제거되고 모든 경보가 제거됩니다. 명시 적으로 요청 될 때까지 앱을 다시 시작할 수 없습니다.

따라서 요약하면 앱을 목록에서 스 와이프하면 먼저 앱의 모든 백그라운드 프로세스 onTaskRemoved가 종료되고 백그라운드 작업이 제거되었음을 앱에 알리는 데 사용 됩니다. 그 시점에서 어떤 일이 일어나는지 결정하는 것은 앱에 달려있는 것처럼 보입니다. 따라서 기술적 으로 그 시점 이후의 앱에 발생하는 일에 대한 엄밀한 규칙 이없는 것 같습니다 .


그것은 분명 명백한 행동이며 매우 흥미 롭습니다!
Matthew 읽기

"프로세스에 존재하는 백그라운드 프로세스를 종료하십시오. 서비스를 직접 중지 시키지는 않습니다." 아직도 그래요? 나는 어제 시험을 치렀다. 어제 주 프로세스에서 백그라운드 서비스가있는 앱을 스 와이프했습니다. apps => 실행 UI는 0 개의 프로세스와 0 개의 서비스를 보여주었습니다. 나중에 별도의 응용 프로그램 특정 프로세스에서 실행되는 프로세스로 동일한 앱을 스 와이프했습니다. apps => UI를 실행하면 프로세스 0 개와 서비스 1 개가 있다고합니다. Android 4.4.4가 포함 된 Moto X (2014)에있었습니다.
Steven Wexler

@StevenWexler : 첫 번째 경우에는 서비스가 자체적으로 종료되었지만 두 번째는 아니었을 수도 있고, 두 번째 시나리오에서는 주요 프로세스가 어떤 이유로 서비스를 중지하지 않기로 결정한 것일 수 있습니다. 확실히 알기 어렵다.
eldarerathis

최근 목록에서 스 와이프하면 시작된 서비스가 자동으로 다시 시작되고 onCreate가 다시 호출됩니다. 그러나 일부 앱에서는 onCreate가 onTaskRemoved 이전에 호출되고 일부 앱에서는 onTaskRemoved 이후에 호출되었습니다. 왜이 행동이 그런가?
umesh

21

com.android.internal.policy.impl.RecentApplicationsBackgroundcom.android.internal.policy.impl.RecentApplicationsDialog 클래스의 소스 코드에 정보가 있습니다 .

이것을 올바르게 읽으면 앱을 선택하기위한 특정 처리기가 있지만 기본적으로 요소를 숨기고 데이터를 지우는 onDetachedFromWindow()호출 com.android.View.onDetachedFromWindow()을 제외하고는 스 와이프를위한 특별한 처리기가 없습니다 . 이것은 목록을 활성화 onPause()하는 응용 프로그램과 응용 프로그램을 "종료"할 때 수행되는 다른 시스템 호출을 표시하지 않기 때문에 Austin Mills의 답변에 해당하는 응용 프로그램을 스 와이프 할 때 특별한 일이 없다는 사실을 암시합니다. 이미 일어났다.


10

뒤로 버튼과 동일하게 작동한다고 생각합니다. 하나의 작은 변화를 제외하고. 그것은 것입니다 finish()응용 프로그램의 모든 활동 / 조각.

작은 자체 빌드 앱으로 약간의 테스트를 수행했습니다. 당신도 테스트 할 수 있습니다. 여기 내 테스트 응용 프로그램 : https://bitbucket.org/Leandros99/lifecycletest (다운로드도 가능합니다. 빌드 할 수없는 사람들을 위해)
모든 활동 라이프 사이클 방법 ( http://developer.android.com/reference/android/app /Activity.html#ActivityLifecycle ) 앱에 로그를 인쇄합니다. adb logcat을 사용하여 볼 수 있습니다 (Android SDK 설치, cmd / shell에서 플랫폼 도구로 cd CD를 입력하고 입력하십시오 adb logcat. 이제 뒤로 누르기 또는 홈 버튼과 같은 작업을 수행 할 때마다 앱이 위에서 언급 한 수명주기 방법을 인쇄합니다. )

귀하의 질문 : 최근 앱 서랍에서 앱을 스 와이프하면 onDestroy메소드가 호출됩니다. 뒤로 버튼과 거의 동일합니다.
희망이 조금 도움이되기를 바랍니다. 궁금한 점이 있으면 물어보십시오.


3

앱과 RAM에 저장된 데이터를 닫습니다. 따라서 더 많은 RAM 공간을 확보하여 다른 앱을 실행할 수 있습니다. 그러나 사용중인 앱을 닫은 결과 백그라운드 서비스가 자동으로 강제 종료되지는 않습니다.


1
일상적인 언어로 작성되었지만 실제로는 상당히 정확한 답변입니다. 프로세스가 폐기되었다는 사실을 포착합니다. 실수로 이전 버튼과 비교하는 다른 많은 답변이 누락되었습니다. 그러나 여기서 누락 된 것은 안드로이드가 메모리를 확보해야 할 때 프로세스를 처리하므로 메모리 정리를 수행하는 동안 필요할 때 자동으로 발생한다는 사실입니다.
Chris Stratton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.