2009-12-03 10 views
9

제목과 마찬가지로 다른 앱이 실행 (전화가 왔거나 사용자가 집 등을 치기)하여 앱이 포커스를 잃을 때를 감지해야합니다.Android : 다른 활동이 시작될 때 감지 (또는 내 활동이 포커스를 잃을 때)

Activity.OnStop은 내 앱 내에서 활동을 전환 할 때에도 호출되므로 Override Activity.OnStop이 작동하지 않습니다.

+0

가능한 중복 (http://stackoverflow.com/questions/3290936/android-detect-when-other- apps-are-launched) – Sam

답변

3

AFAIK Android는이 기능을 제공하지 않습니다. 직접 추적 할 수 있습니다 (예 : 활동 중 하나의 onStop()이 호출되고 X 기간 내에 다른 활동의 onStart()이 호출되지 않으면 다른 일부 앱의 활동이 포그 라운드에 있음).

+1

나는 그것을 시험해 보았다. 그러나 문제는 onStop이 실제로 새로운 활동 onStart 후에 약 15 초 동안 해고되었다는 것이다. – FlySwat

+2

그러면 일이 쉬워 질 것입니다. 정적 인 AtomicInteger를 사용하여 활성 활동 수를 유지합니다. 정적 이니셜 라이저에서 0으로 설정하십시오. 모든 활동의 onStart()에서 증가시킵니다. 모든 활동에서 onStop()으로 감소 시키십시오. onStop()에서 감소 후에 값이 0이면 15 초 동안 화면에 아무런 활동도 없었으므로 잠시 사라 졌음을 알 것입니다. 개인적으로 안드로이드는 실제로 애플리케이션 경계를 홍보하도록 설계되지 않았기 때문에 걱정하지 않으셔도됩니다. – CommonsWare

+0

'onPause()'가이 시나리오에서 더 정확하지 않습니까? –

4

난 당신이 사용할 수 있으리라 생각합니다 :

onWindowsFocusChanged (부울 hasFocus) 당신의 활동에서

합니다.

1

ICS가 높아질 수 있습니다.

이것은 안드로이드 사이트에서 가져온 것입니다

는 사용자가 UI를 종료 할 때 통지하려면 onTrimMemory 액티비티 클래스에서() 콜백을 구현합니다. 이 방법을 사용하여 이 방법을 사용하여 TRIM_MEMORY_UI_HIDDEN 수준을 수신해야합니다. 은 UI가 현재 보이지 않게되어 있음을 나타내고 사용자의 UI에서만 사용하는 리소스를 해제해야합니다. 앱이 앱 프로세스의 모든 UI 구성 요소가 사용자로부터 숨겨진 될 경우에만 TRIM_MEMORY_UI_HIDDEN와 onTrimMemory() 콜백을 수신

알 수 있습니다.

은 자세한 내용 http://developer.android.com/training/articles/memory.html이 페이지를 참조하십시오

[안드로이드, 다른 응용 프로그램이 실행될 때 감지]의
+0

이것은 나를 위해 큰 일을했습니다. 감사! – masterwok

관련 문제