안녕하세요 점냥입니다:) 좋은 앱 서비스를 완성했다면 그다음 고민은 수익 모델이죠. AWS 등 클라우드 서비스를 통해 서버를 구축했다면 다달이 나오는 서버 비용을 무시할 수 없기 때문이에요... 그렇기 때문에 우리 Android 개발자들은 Admob 광고 SDK를 앱에 잘 녹여들 수 있게 고민을 시작해야 합니다. !!!? 갑자기 Admob.. 왜..? 그 이유는 최근 Admob 네이티브 광고를 개인 프로젝트에 적용하느라 아주 고생을 많이 했기 때문이에요... 라이브러리 자체를 적용하는 것은 어렵지 않아요. 하지만 우리 프로젝트 앱들은 모든 코드가 Activity class 하나 파일에 들어가 있는 형태는 아니잖아요? 여러 가지 다양하고 복잡한 구조로 구성되어 있는 데, 공식 문서에서 설명하는 내용은 간단..
안녕하세요. 점냥입니다:) 굉장히 오랜만에 글을 쓰네요 ㅎ. 다들 잘 지내셨나요? 오늘은 RecyclerView 새로운 버전이 나오면서 새로운 Adapter인 ConcatAdapter에 대해서 알아보겠습니다. 사실 처음에는 MergeAdapter라는 이름으로 나왔지만 ConcatAdpater로 이름이 변경되었습니다. ConcatAdapter RecyclerView는 하나의 Adapter만을 가지며, 반복되는 뷰 리스트를 그리는 위젯입니다. 그 이유 때문에 사진과 같이 Header 혹은 Footer 등을 표현하기 위해 포지션으로 구분하고, 각 뷰 타입의 로직을 포지션 별로 구분하여 넣어주어야 했습니다. 이는 한 클래스에서 2가지 역할을 가지는 방법이며, 뷰가 복잡해질수록 코드가 비대해지는 안 좋은 방법이었..
들어가기 전 이번 포스팅에서는 Android 앱에서 가장 많이 사용한다고 볼 수 있는 RecyclerView의 성능 개선에 대해서 알아보자. 하지만 먼저 알아야 할 도구가 있다. 바로 GPU 렌더링 막대기 개발자 옵션 -> 프로필 GPU 렌더링에서 킬 수 있는 이 기능은 기기의 렌더링 상황을 시각적으로 확인하여 어느 부분에서 지연이 되고 있는지 알 수 있다. 아래는 예시 사진으로 왼쪽은 갤럭시 설정 앱, 오른쪽은 필자가 만든 WASK 앱이다. 가로 막대기 안드로이드는 초당 60fps를 가져야 사용자는 부드럽다고 느낀다. 프레임 기준으로 계산해보면 1000ms / 60 fps = 16.66...로 프레임 하나당 16ms내에 생성돼야 한다. 가로 막대기는 16ms를 뜻한다. 세로 막대기 세로 막대기는 한 프..
Android의 RecyclerView은 대용량의 데이터를 효율적으로 보여주는 뷰입니다. 하지만 그렇다고 대용량의 데이터를 한 번에 보여주는 것은 비효율적입니다. 적당한 크기의 데이터로 보여주고 필요에 따라서 데이터를 점차 추가하는 형태로 구현하는 것이 좋습니다. RecyclerView Pagination 패턴이라고 할까요 이때 중요한 부분은 데이터를 추가로 Fetch 하는 시점을 잡는 것입니다. 보통 RecyclerView의 스크롤의 끝에 도달했을 때입니다. Android Jetpack Paging 라이브러리는 개발자가 쉽게 Pagination 패턴을 구현하는 방법을 제공해 줍니다. 데이터를 적절한 시점에 Fetch 하는 것뿐만 아니라 캐시, 에러 처리 등 유용한 기능들이 많이 포함되어 있습니다. 그..