본문 바로가기

전체 글123

[Android] # 14 Navigation Component 사용하기 유튜브에서는 홈 탭, 구독 탭, 보관함 탭 등을 눌러 창을 이동해도, 이전 창에서의 데이터를 모두 유지합니다. 저는 이를 구현해 보기 위해서, 각 프레그먼트를 미리 추가해 놓고 show, hide 매소드를 이용하고 있었습니다. [Android] #9 컴포넌트 설계 수정 빠르게 피드백을 받아보고자, 플레이리스트 기능을 제외하고 출시를 했었습니다. 해당 기능에 대한 고려 없이 개발을 했던 것 같습니다. 추가하려던 찰나 컴포넌트 설계를 잘못했다는 것을 깨 joh9911-programming-note.tistory.com 한눈에 보기 복잡한 Backpress 처리가 필요했었습니다. // ex) 하나의 프레그먼트 callback = object : OnBackPressedCallback(true) { overri.. 2023. 8. 25.
[Android] # 13 MVVM 패턴 적용 디자인 패턴 공부를 미뤄왔었습니다. 귀찮기도 했고, 무엇보다 기능 구현을 우선으로 여겨, 여러 자잘한 버그들을 수정하고 보완하는데 시간을 보냈습니다. 필요한 라이브러리 기술들을 살펴보려 예시 앱들을 찬찬히 뜯어보는데, 모두 MVVM 아키텍처 기반으로 구성되어 있어, 무지했던 저는 알아보기 힘들었습니다. 이번 기회에 본격적으로 공부도 할 겸, 기존 앱에 MVVM 패턴을 적용해 봤습니다. 다음은 수정한 굵직한 부분입니다. 데이터 계층 정의 이전까지는 각 프레그먼트에서 각 라이브러리(Retrofit2, RoomDB) 의 매서드를 통해 데이터를 요청했습니다. 필요한 데이터 유형이 같은 경우, 데이터를 요청하는 메서드를 복붙 하여 사용했으며 데이터터 요청 방식이 달라질 경우, 모든 코드를 하나하나 수정해야 했습니.. 2023. 8. 14.
[Android] # 문제 해결 - 6 Room 마이그레이션 실수.. 미칠 것 같습니다. 데이터베이스 스키마 구조를 수정하면서 Room 버전을 업데이트하였고, 사용했던 마이그레이션들을 명시하지 않은 채 앱 업데이트를 진행했습니다. 앱이 들어가자마자 충돌이 나네요.. 더 심각했던 것은, 업데이트 이전 데이터베이스 구조와, 업데이트 이후 데이터베이스 구조의 차이점을 잘 모르겠다는 점이었습니다. 그동안 작성했던 마이그레이션을 업데이트할 때마다 지웠었습니다. 정말 아무 생각이 없었던 것 같아요. 기억을 되살려서 다시 마이그레이션을 작성한 후, 다시 업데이트를 진행했지만 계속 충돌이 났습니다. 이때 멘탈을 살짝 놨습니다. 구글 팀에서 업데이트를 검토하는데 하루 반이 걸리던데, 만약 다시 업데이트를 했을 때에도 충돌이 나면 정말 큰일이었습니다. 고민하다 결국 데이터베이스 내 저장된 .. 2023. 7. 6.
[Android] # 문제 해결 - 5 앱 이슈 해결 6월 28일쯤 비정상 종료 횟수가 치솟았습니다. 오류의 목록은 다음과 같습니다. 대부분 서비스 관련 오류입니다. 오류 횟수가 그렇게 많지가 않았어서, 오류 원인을 명확히 알았음에도 불구하고 미뤄두었습니다. 이번에 뷰모델을 공부하고 적용해 보면서 차근차근 고쳐나가자 생각하고 있었거든요. 갑자기 횟수가 많아져서, 오류부터 해결하고자 합니다. 첫 번째 오류 해당 오류를 해결하려다가 머릿속에 혼란이 와, 자그마치 3일 동안 삽질을 했네요. 일단 해당 오류는 백그라운드 상태에서, 포그라운드 서비스를 시작하려 할 때 나타나는 예외입니다. 시작 지점이 exoPlayer의 onPlayerStateChanged입니다. 이는 exoPlayer의 상태가 바뀔 때 호출되는 콜백 리스너이며, 저는 exoPlayer의 상태가 바.. 2023. 7. 1.
[Android] #12 mediaSession 공부 및 코드 리팩토링 - 1 비디오를 재생하고 관리하는 부분에 있어서, 제 코드는 엉망진창 그 자체입니다. 지금도 어떤 원리로 제 코드가 돌아가는지 모르겠습니다.. 그냥 작동은 잘 되네요. Service 코드를 리팩토링 하던 중, 다음과 같은 사실을 발견할 수 있었습니다. 분명 음악을 재생 중이며 Notification까지 뜨지만, 기기 내 미디어 출력에서는 현재 재생 중인 곡이 뜨지 않는다는 것을 알게 되었습니다. 다른 앱은 잘 떠요. 공식 문서에 미디어 플레이어 앱의 흐름에 관련한 문서가 있는데, 공부해 보면서 코드를 리팩토링 해보려고 합니다. 이전까지의 코드 구조 억지 구현이다 보니 구조라고 말하기도 좀 그러네요.. override fun onCreate() { super.onCreate() // 미디어 세션 초기화 media.. 2023. 6. 29.
[Android] #11 Youtube data api 할당량 최적화 (데이터 캐싱) Youtube data api 에는 하루에 요청할 수 있는 횟수의 제한이 있습니다. 한 api key를 기준으로, 하루 할당량 10000이며, 각 요청 종류별로 요구되는 비용이 다릅니다. YouTube Data API (v3) - 할당량 계산기 | Google for Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English YouTube Data API (v3) - 할당량 계산기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 아래 표 developers.google.com 기존 앱과의 차별점은 음원을 다운로드할 필요가 없다는 것이므로, 감상하고 싶은 영상을 검색할 수 있는 기능이 굉장히 중요합니다. 문제.. 2023. 6. 27.
[2023-06-17] [프로그래머스 lv2] 두 큐 합 같게 만들기 (Kotlin) 1시간 20분정도 걸렸습니다.. 반복문 탈출 조건을 찾느라 오래 걸렸고, 또한 총합을 Long으로 설정해주지 않아, 삽질을 많이 했습니다. package seventyFourth import java.io.* import java.util.* class `lv2 두 큐 합 같게 만들기` { class Solution { fun solution(queue1: IntArray, queue2: IntArray): Int { var answer: Int = 0 val totalSum = queue1.sum().toLong() + queue2.sum().toLong() val limit = queue1.size * 4 if (totalSum % 2 != 0L) return -1 else{ val queueOne .. 2023. 6. 17.
[2023-06-17] [프로그래머스 lv1] 숫자 문자열과 영단어 음.. 15분 걸렸습니다. 그냥 아스키코드로 바꾼 값이 57이 넘을 경우 글자를 하나씩 추가하여 확인하고, 바꿔주었습니다. 다른 분 풀이를 보니 다 replace 매소드를 쓰셨네요. 저도 써먹어 버릇해야 할 것 같아요. package seventyFourth class `lv1 숫자 문자열과 영단어` { class Solution { fun solution(s: String): Int { var answer: Int = 0 var an = "" val map = mutableMapOf() val arr = listOf("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine") for (index in arr.indices.. 2023. 6. 17.