액티비티가 시작할때 처음 onCreate 호출되면서 프래그먼트가 붙게 되는데 onAttach부터 시작
액티비티 생명주기에서
onStop으로 나가면 onStart로 돌아온다.
onPause로 나가면 onResume으로 돌아온다.
멘토님은 on리스너를 붙일 때 onStart에서 붙이고 리스너를 해제할 때에는 onStop에서 해제(또는 null 처리)한다고 한다.
안드로이드 오른쪽 메뉴키를 누르면 onPause -> onStop으로 바로 호출된다.
현업에서는 유저 행동 이벤트 추적을 함
애니메이션이 셋팅되어있는 경우에는 onDestroy()에서 애니메이션을 해제해줘야 한다.
애니메이션이 코루틴으로 동작할 경우에는 앱이 꺼져도 메모리에서 계속 동작하기 때문
모든 코드들을 정리하는 부분을 onDestroy()에서 해주면 된다.
프래그먼트 교체 시 애니메이션은 FragmentManager에서 setCustomAnimations()로 셋팅해줄 수 있다.
셋팅에 필요한 애니메이션을 지정해주는 Animation xml파일을 작성해줘야 한다.
리소스 파일 추가할때 Animation으로 지정해주면 xml파일을 추가할 수 있다.
lifecycleScope로 코루틴스코프를 만들면 lifecycle이 끝날때 진행하던 코루틴 동작들도 모두 사라진다.
코루틴 스코프 안에서 suspend 함수를 만나면 suspend 함수가 실행이 완료될때까지 기다리고 다음 동작을 실행하게 된다.
비동기로 처리할게 있다면 async await을 사용하면 된다.
예를 들어 2개의 api로 다른 정보를 가져와 하나의 결과값을 반환해주는 함수를 만들 때
async 2개를 열어서 결과값을 await으로 받아와서 합쳐주면 된다.
async 함수를 변수에 담을 때에는 실행이 되지 않고
이후에 await()을 호출해주면 그때 결과값을 받아온다. 이때 코루틴은 suspend함수와 같이 일시중지(suspend)된다
exception 커스텀은 sealed interface로 만들 수 있다.
sealed interface Result {
class NoResultException(errorMessage:String): Exception()
class OverLimitException(e: Throwable): Exception()
}
// 예외 처리
try{
...
}catch(e: Exception){
Result.NoResultException("빈 값입니다.")
Result.OverLimitException(e)
}
// 예외 타입에 따라 분기 처리 가능
when(response){
is Result.NoResultException -> {}
is Result.OverLimitException -> {}
else -> {}
}
뷰모델에서 에러메시지 라이브데이터를 만들고
뷰에서 옵저버를 셋팅한다음에 에러메시지 내용을 받을때마다 스낵바로 보여주게 할 수 있다.