룬아님의 취중코딩

생명주기 메서드 사용 시 주의사항, super.onXxx 호출 순서 본문

개발/안드로이드 개발

생명주기 메서드 사용 시 주의사항, super.onXxx 호출 순서

룬아님 2020. 2. 17. 16:48

1. 리소스 생성 / 제거는 대칭으로 실행

onCreate()에서 리소스를 생성했다면 onDestroy()에서 제거하고, onResume()에서 생성했다면 onPause()에서 제거한다.

 

2. super.onXxx() 호출 순서

onCreate(), onStart(), onResume()에서는 super.onXxx를 먼저
onPause(), onStop(), onDestroy()에서는 나중에 실행

생명주기를 시작할 때는 뭔가를 선언하거나 만들어내는 일이 많고, 끝날 때는 삭제하거나 정리하는 일이 많다.
많은 문서나 샘플에서도 이런 규칙은 없고  여기에 맞게 작성하지도 않지만 effective-android에는 'COnstructive first, destructiove last'라는 내용이 있다.

만약 BaseActivity등을 상속받아 사용했을 때 BaseActivity의 onResume에서 어떤 객체를 만들었을 때
상속받은 Activity에서 onResume이 아래에 있다면 해당 객체를 접근할 때에 NullPointerException이 발생할 수도 있다.
이의 역으로도 onDestroy에서 null로 초기화 하거나 릴리즈 해주는 코드를 넣었는데 onDestroy를 먼저 호출한다면 그 밑의 코드에서도 크래시가 발생할 경우가 있다.

 

3. finish() 메서드 호출하고 바로 리턴 필요

finish()는 return을 포함하지 않는다. 만약 finish()가 메서드의 끝에 있다면  return을 할 필요가 없지만 밑에 계속 로직이 존재한다면
원하지 않는 결과를 보거나 크래시를 경험할 수 있다.

반응형
Comments