onDestroy()는 뒤로 버튼을 눌렀을 때 호출됩니다.
-
21-12-2019 - |
문제
내 활동에서 재정의했습니다. 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()
, 그러면 "닫게" 됩니다.
/**
* 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
다른 방법으로, 예를 들어홈버튼 누르기.