본문 바로가기
안드로이드 프로젝트/유튜브 음정 조절 어플리케이션

[Android] #문제 해결 -2 앱이 자주 팅기는 이슈

by joh9911 2023. 5. 26.

 

 

처음으로 별점 1점의 리뷰가 달렸습니다.

 

별점 1점 리뷰

 

속상하지만..  앱이 항상 튕긴다면 너무나도 큰 문제기에, 바로 문제점이 무엇인지 찾아보았습니다.

 

 

 

구글 플레이 콘솔에는, 앱의 비정상 종료 횟수와 그에 대한 분석을 확인해 볼 수 있습니다.

 

고작 몇 번의 실험이 다 잘 되었다는 이유로 신경을 쓰지 않고 있었습니다. 부끄럽네요..

 

 

오류 목록
오류 목록

 

현재까지 비정상 종료가 된 횟수와, 예외가 발생한 위치가 자세히 나와있습니다.

 

첫 번째 항목부터 확인을 해봤습니다.

 

 

Fragment의 기본 생성자

 

다음은 해당 오류의 상세한 로그 내용입니다.

 

오류 로그창
오류 로그창

 

 

Fragment InstantiationException 예외가 발생한 것을 확인할 수 있었습니다.

 

해당 예외의 원인은 Fragment의 인자를 받는 생성자를 추가했기 때문이었습니다.

 

 

동영상 재생 프레그먼트
동영상 재생 프레그먼트

 

비디오를 클릭하면, 동영상 재생 프레그먼트를 실행시키고,

 

해당 비디의 정보를 전달하여 재생하는 식으로 설계를 했었습니다.

 

하지만 Fragment에서는 인자를 전달하지 않고, 기본 생성자만 사용해야 한다고 합니다.

 

 

 

앱이 백그라운드 상태에 있을 때 시스템 자원이 부족해지면, 시스템은 백그라운드 앱의 프로세스를 종료할 수 있습니다.

 

이때 사용자가 다시 이 앱을 전면으로 가져올 경우,

 

Android 시스템은 종료되기 전의 앱의 상태를 최대한 복원하려고 합니다.

 

이때 Fragment는 인자가 없는 기본 생성자로 초기화를 진행하는데,  인자가 있을 경우 기본 생성자를 찾지 못해 오류가 발생합니다.

 

 

 

 

 

arguments에 Bundle 객체를 넘겨주는 형식으로 모두 수정하였습니다.

 

data class 형태의 데이터를 전달해야 하기 때문에, parcelable로 객체를 감싸주었습니다.

 

객체 직렬화
객체 직렬화

 

다시 한번 직렬화 시켜주기

 

 

 

인기 Top 100 목록을 나타내는 리사이클러뷰에서, 아이템을 클릭했을 때의 코드입니다.

 

클릭한 아이템과, 전체의 아이템 목록을 arguments에 넘겨주었고,

 

그대로 동영상 재생 프레그먼트인 playerFragment를 실행시켰습니다.

 

 

데이터 받아주기

 

lateinit을 통해 각각의 변수를 미리 선언한 후,

 

데이터를 받아와 설정해 주는 코드입니다.

 

 

 

 

두 번째는 검색 키워드 문제였습니다.

 

이전 코드
이전 코드

 

저는 검색어 창이 비어있는 경우를  ""로 설정했습니다.

 

이 부분을 null로 바꿔주었습니다.

 

고친 코드
고친 코드

 

 

 

오류를 고친 후, 업데이트를 진행하였습니다.

 

 

앞으로의 오류 보고서를 보며, 오류를 완전히 해결한 것이 맞는지 확인해보려고 합니다.

댓글