Android Activites의 onPause ()와 onStop ()의 차이점은 무엇입니까? onStop(). ‘활동이 더 이상 보이지

안드로이드 문서 http://developer.android.com/reference/android/app/Activity.html 에서 ‘활동이 포 그라운드로 온다’가 호출 onPause()하고 ‘활동이 더 이상 보이지 않습니다’라고 전화했습니다 onStop().

‘활동이 더 이상 보이지 않습니다’와 같은 ‘활동이 포 그라운드로 나오지 않습니까?’ 그들 사이의 차이점이 무엇인지 말씀해 주시겠습니까?



답변

아니요, 일부 활동이 포 그라운드에 있다고해서 반드시 다른 활동이 완전히 보이지 않는 것은 아닙니다. 다음과 같은 경우를 고려하십시오.

테마 Theme.Dialog가있는 활동

여기서 우리는 두 활동을 동시에 볼 수 있습니다. 필드가있는 첫 번째 활동은 다른 활동에 의해 가려져서 사용자는 더 이상 상호 작용할 수 없습니다. 그러나 모든 결과로 여전히 볼 수 있습니다.

그것은 어떤 활동이 완전히 불투명하고 전체 화면을 덮고 있는지 아닌지에 대한 질문을 남깁니다. 이 결정은 활동이 포함 된 창을 기반으로합니다. 창에 windowIsFloating또는 플래그가있는 경우 windowIsTranslucent활동이 기본 항목을 표시하지 않는 것으로 간주됩니다. 그렇지 않으면 onStop()호출되어 호출됩니다. 관련 코드는 다음에서 찾을 수 있습니다 com.android.server.am.ActivityRecord.

fullscreen = ent != null && !ent.array.getBoolean(
        com.android.internal.R.styleable.Window_windowIsFloating, false)
        && !ent.array.getBoolean(
        com.android.internal.R.styleable.Window_windowIsTranslucent, false);


답변

여전히 그 일부를 볼 수 있다면 ( Activity전면에 오면 전체 화면을 차지하지 않거나 다소 투명합니다) onPause()호출됩니다. 당신이 그것의 일부를 볼 수없는 경우, onStop()호출됩니다.

예를 들어 대화 상자 **는 이전의 전체 내용 Activity을 다루지 않을 수 있으며,이 때가 onPause()호출 될 때입니다 .

** 여기서는 Android 대화 상자를 말하는 것이 아니라 사용자 화면의 일부만 나타나고 모호하게하는 것에 대한 개념적 아이디어입니다. 이 메모는 아래 @GMsoF의 의견을 바탕으로 명확하게하기 위해 추가되었습니다.


답변

포 그라운드에 있다는 것은 액티비티에 입력 포커스가 있음을 의미합니다. 예를 들어 활동이 표시되지만 포커스가있는 대화 상자에 의해 부분적으로 가려 질 수 있습니다. 이 경우에는 onPause()호출되지만 호출되지는 않습니다 onStop(). 대화 상자가 사라지면 액티비티의 onResume()메소드가 호출됩니다 (그러나 아님 onStart()).


답변

실제로 “onPause ()”“onPause () + onStop ()”차이점을 고려해야합니다 .

새로운 활동이 발생할 때마다 화면의 일부 공간을 차지합니다. 따라서 이전에 실행중인 활동은 여전히 ​​어느 정도 볼 수 있습니다. 이 경우 이전에 실행중인 활동은 Back Stack으로 푸시되지 않습니다. 따라서 여기서는 onPause () 메소드 만 호출 됩니다.

반면에 일부 새로운 활동이 발생하고 전체 화면을 차지하면 이전에 실행중인 활동이 사라집니다. 이 경우 이전에 실행중인 활동이 Back Stack으로 이동됩니다. 여기서 onPause () + onStop ()이 호출됩니다.

요약하기

onPause () -화면이 부분적으로 다른 새로운 활동으로 덮여 있습니다. 액티비티가 백 스택으로 이동되지 않습니다.

onPause () + onStop () -화면이 다른 새로운 활동으로 완전히 덮여 있습니다. 액티비티가 백 스택으로 이동됩니다.

백 스택에 대해 자세히 알아보십시오 .


답변

간결한 말로 :

onStop()다른 활동이 표시 될 때 이전 활동 라이프 사이클 메소드 중 하나가 호출됩니다. 활동 맨 위에 대화가 onPause()있으면 호출됩니다.

참고 : 활동은 전체 화면을 채우는 구성 요소입니다.

참고 : 대화는 화면을 완전히 채우지 않으므로 활동이 아닙니다.


답변

onPause 및 onStop 메소드에 많은 문제가 발생했기 때문에 세 가지 시나리오가 사라졌습니다
.-1 . 최근 앱 버튼을 클릭하면 수명주기 메소드가 호출되지 않지만 onWindowFocusChanged (boolean hasFocus)는 hasFocus 값으로 호출됩니다. 거짓으로 전달되었습니다. 5 이전의 Android 버전에서는 최근 앱 버튼을 누르면 onPause 메소드가 호출되었습니다.

2. Malcolm 에서 언급 한 것처럼 활동과 같은 팝업이 활동 위에 나타나면 onPause 버튼이 호출됩니다. 전체 화면을 차지하는 새 활동이 호출되면 이전 활동에서 onStop이 호출됩니다. Android 권한 대화 상자 는 활동이 onPause를 호출하도록합니다.

삼.활동 시간이 초과되면 onPause가 호출됩니다. 언젠가 화면을 열지 않으면 onStop이 호출됩니다.

또한 ateiob 이 언급 한 답변 중 하나를 중요하게 생각 합니다.

일시 정지 된 활동이 완전히 활성 상태입니다 (모든 상태 및 구성원 정보를 유지하고 창 관리자에 연결된 상태로 유지됨). 중지 된 활동은 모든 상태 및 구성원 정보를 유지하지만 더 이상 창 관리자에 첨부되지 않습니다

도움이 되길 바랍니다.


답변

새로운 활동이 시작될 때마다 onPause어떤 상황에서도 이전 활동 이 도전적으로 부를 것입니다.

실제로 두 가지 상황이 있습니다.

1- 이전 활동의 일부가 표시되거나 새 활동이 투명합니다. onPause호출 만 됩니다.

2 이전 활동은 완전히 새로운 활동에 의해 덮여 : 모두 onPauseonStop호출됩니다

—- 몇 가지 메모를 작성하는 것이 좋습니다.

비고 1 : 대화가 활동의 상단에서 시작되는 경우 NONE의 onPause또는 onStop호출되지 않습니다.

참고 2 : 테마가 대화 상자로 설정된 활동이 정상 동작과 같습니다.

참고 3 : 마시맬로가 발생하기 때문에 권한 대화 상자와 같은 시스템 대화 상자가 나타납니다 onPause.