문제

내 활동에서 재정의했습니다. onDestory() 이 메서드가 호출되고 있는지 표시하기 위해 로그 호출을 넣기만 하면 됩니다.(Android 4.2.2 및 4.4.4에서 테스트됨)

@Override
protected void onDestroy() {
    Log.i(TAG, "onDestroy() was called");
    super.onDestroy();
}

뒤로 버튼을 누르면 이 메서드가 호출됩니다(로그를 보았습니다).

나는 전화기의 메모리가 부족해지지 않는 한 이런 일이 일어나서는 안 된다고 생각합니다.앱에는 MainActivity와 일부 조각 외에는 아무것도 없습니다.

다음은 사용자가 MainActivity에 있을 때 뒤로 버튼을 눌렀을 때의 로그입니다.

I/MainActivity? onBackPressed() was called
I/MainActivity? onStop() was called
I/MainActivity? onDestroy() was called

왜 이런 일이 발생합니까?

나도 확인해봤는데 isFinishing() 에서 onPause() 그리고 그것은 항상 돌아오죠 true

Javadoc에서:

활동이 삭제되기 전에 최종 정리를 수행합니다. 이것은 일어날 수 있습니다 활동이 끝나기 때문에 (누군가가 마무리라고 불리는 사람이거나 시스템이 공간을 절약하기 위해 활동 의이 인스턴스를 일시적으로 파괴하기 때문에.이 두 시나리오를 Isfinishing 방법으로 구별 할 수 있습니다.메모:이 방법을 데이터 저장 장소로 불려지 마십시오!

도움이 되었습니까?

해결책

내부에서 뒤로 버튼을 누르면 Activity, 그것은 전화할 것이다 finish(), 그러면 "닫게" 됩니다.

Activity.java

/**
 * Called when the activity has detected the user's press of the back
 * key. The default implementation simply finishes the current activity,
 * but you can override this to do whatever you want.
 */
public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}

그런 일이 일어날 때, onDestroy() 호출될 수 있습니다(그리고 일반적으로 호출됩니다).

보호된 무효 onDestroy()

활동이 삭제되기 전에 최종 정리를 수행합니다.이는 활동이 종료되고 있기 때문에 발생할 수 있습니다(누군가가 Finish()라고 불렀어, 또는 시스템이 공간을 절약하기 위해 활동의 이 인스턴스를 일시적으로 삭제하기 때문입니다.isFinishing() 메서드를 사용하면 이 두 가지 시나리오를 구분할 수 있습니다.

같은 이유로 퍼팅하는 이유에도 적용됩니다. isFinishing() 내부에 onPause() 항상 반환 true, 뒤로 버튼을 누르면 (통화 finish()).돌아오지 않을 거야 true 당신이 숨기면 Activity 다른 방법으로, 예를 들어홈버튼 누르기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top