일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- espresso
- Error:Execution failed for task ':app:mergeDebugResources'
- IntentTestRule
- viewholder
- high order function
- fragment
- 스와이프
- recyclerview
- ActivityTestRule
- 뷰변경 감지
- ui test
- 생명주기
- 리사이클러뷰
- adapter
- Android
- 안드로이드13
- binding adapter
- 코딜리티
- 코틀린
- 고차함수
- 재사용
- Fragment 수동 추가
- LayoutManger
- 구분선
- 안드로이드스튜디오
- 테마 아이콘
- 안드로이드
- Fragment에서 Activity의 함수 사용하기
- 안드로이드개발레벨업교과서
- searchview
Archives
- Today
- Total
룬아님의 취중코딩
생명주기 메서드 사용 시 주의사항, super.onXxx 호출 순서 본문
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을 할 필요가 없지만 밑에 계속 로직이 존재한다면
원하지 않는 결과를 보거나 크래시를 경험할 수 있다.
반응형
'개발 > 안드로이드 개발' 카테고리의 다른 글
java.lang.IllegalArgumentException: This component requires that you specify a valid android (0) | 2020.03.12 |
---|---|
androidx.appcompat:appcompat:1.1.0을 사용할 때 롤리팝 버전 WebView에서 crash가 발생하는 증상 (0) | 2020.02.24 |
Activity 생명주기 메서드 호출 시점 (0) | 2020.02.17 |
TextView style이 italic일 때 글자 끝이 잘리는 문제 (0) | 2020.02.14 |
Gson원하는 Date format으로 변경하기 (0) | 2020.02.11 |
Comments