본문 바로가기

안드로이드/코틀린

(32)
[Android/Kotlin] Room 마이그레이션 Entity(테이블)의 컬럼이 추가되거나, Entity 자체를 추가하는등 Database 수정이 발생했을때 아무런 조치를 취하지 않고 버전만 올린다면 저장되어 있던 데이터가 날아가 사용자에게 불편함을 줄 수 있어 필수로 처리 해줘야 합니다. Room 사용법은 제 포스팅을 참고해주세요. >> 버전업 @Database(version = 2, entities = [PlantData.Item::class,DiaryData.Item::class]) abstract class DB : RoomDatabase() { Room의 구성요소중 하나임 RoomDatabase에 명시된 버전을 수정합니다. [ ex) 1 -> 2 ] >> Migration 객체 생성 및 sql 문 작성 private var MIGRATION_1..
[Android/Kotlin] Room으로 앱내 데이터 저장하기 Room은 내부 디비 라이브러리로 AAC(Android Architecture Component)중 하나로 많은 분들이 사용하고 있습니다. >> Gradle 설정 (androidX 기준) 최신버전은 공식 문서를 참고해주세요. def room_version = "2.2.5" // room implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" androidTestImplementation "androidx.room:room-testing:$room_version" // optional - RxJava support for Room implementation "android..
[코틀린]Kotlin Coroutine 사용하기 안드로이드 프로그래밍에서 비동기 프로그래밍은 서버 통신 및 디비 접근과 같이 많은 부분에서 사용되는데, 그 부분을 조금 더 유연하고 간편하게 사용하도록 도와주는게 코루틴인것 같습니다. 비동시 프로그래밍시 스레드를 신중하게 다뤄야 하는데 스레드 생성 및 해제, Context-Switching시 CPU의 메모리를 소모해 많은 수의 스레드를 갖는데 어려움이 있고, 메인 스레드에서 일정시간 한가지 TASK를 수행하면 ANR에러가 발생하기 때문입니다. 그에반해 코루틴은 스레드가 아닌 서브 루틴을 일시정지(suspend)시키는 방식으로 Context-Switching비용이 발생하지 않아 라이트한 스레드라고도 불립니다. context-swiching : 스레드 실행 혹은 종료시 스레드의 상태를 저장하고 복구하는 프로..
[Android] Notification Group을 이용한 푸시 ui 개선 'Notification Group'은 Android 7.0부터 도입돼 여러개의 노티를 그룹화 해서 보여줄수 있습니다. 예로 카카오톡의 새로운 메세지나 지메일 메일 알림이 Notification Group을 사용해 여러개의 알림들을 한가지 그룹으로 보여주고 아래로 당겼을때 개별 노티 리스트를 보여줍니다. 도입된 당시는 Bundle이라고 불렀지만 최신 문서에서는 Group으로 네이밍이 변경 됐습니다. ※공식문서를 참고 했습니다. >그룹지정 NotificationCompat.Builder를 생성할때 'setGroup(String groupKey)' 옵션으로 속할 그룹 명을 지정합니다. 설정된 키값 별로 묶여서 보여집니다. KEY_WATER_GROUP : 저는 각 식물들의 물주는 노티들을 묶어서 보여주기 위한..
[Android] Coroutine + 위젯 업데이트 하기 현재 서비스중인 앱의 디비(Realm -> Room)를 이관하는 작업을 진행하고 있습니다. 단순 이관뿐만 아니라 코루틴을 사용한 비동기 처리 작업을 추가로 진행하면서 위젯을 업데이트 하는데 있어 겪었던 문제와 해결 방법에대해 공유드리겠습니다. 위젯 관련 다른 포스팅 [안드로이드/Android] 위젯 만들기 AlarmManager를 이용해 위젯을 업데이트 하자! >플로우 내부 디비 데이터 조회 -> 정제된 데이터 기반으로 위젯 뷰 업데이트 플로우 자체는 간단하지만 오래된 코드를 분석해서 리펙토링 하는데 많은 시간이 소요됐고, 코루틴을 도입해 비동기로 데이터를 가져와 위젯을 업데이트 할때 엑티비티와 같은 일반 뷰들은 Main thread에서 업데이트 했을때 적용이 됐지만 위젯은 2가지 상황으로 나뉘어 적절하..
페이스북 광고 sdk 적용 다국어 서비스 출시를 생각하고 있는데 카카오 애드핏은 해외 유저들에게 적합하지 않을것 같아 애드몹 / 페이스북으로 대체 하고자 합니다. 앞서 수익이 애드몹이나 애드핏과 어떻게 차이 나는지 확인할 겸 선 추가 했습니다. 페이스북 광고 계정을 생성하고, 앱을 등록해야 합니다. 링크를 클릭해 페이스북 로그인 후 광고 계정을 생성 해주세요. 계정을 생성하면 비지니스(?) 라고 생성하라고 하는데 ( 해당 내용은 캡쳐를 못했습니다. ㅠㅠ ) 앱의 개념 보다는 페이스북 관련 비지니스를 총괄 하는 관리 계정을 생성한다고 생각하시면 되겠습니다. 앱 추가 관리 계정 생성후 좌측 상단에 '수익 관리자' 메뉴로 들어간 후, 바뀐 메뉴들중 '통합' > '자산' 으로 들어가서 자산을 생성하시고 기존에 출시했거나 출시할 예정인 앱..
[And/Kotlin] Numberpicker를 활용한 생년월일 선택 뷰 만들기 최초 작성 : 2020/10/13 numberpicker input type 수정 : 2020/10/23 numberpicker editText 값 가져오기 포스팅 추가 : 2021/03/23 기본적으로 제공하는 Datapicker와 DatepickerDialog를 활용해서 날짜 선택 화면을 만들 수 있습니다. spnnier 와 calendar 2가지중 적합한 UI를 선택할 수 있습니다. ( 개인적으로 이쁜건 spnnier라고 생각하고 조금 더 신경쓴(?) 느낌입니다. ) datepickermode와 calednarViewshown 옵션으로 간단하게 spinner와 calendar 설정이 가능하다. 하지만 간혹 커스텀된 UI로(아래 사진 참고) 날짜를 선택해야할 경우가 있는데 그럴땐 Numberpicke..
AAC koin 적용하기 Koin? DI (= Dependency Injection) 라이브러리로 Dagger 와 같지만 학습 곡선이 낮은 편입니다. A클래스에서 B클래스를 사용하는 경우 의존성을 갖는데 B 클래스가 변경되는 경우 B클래스를 사용하는 A 클래스에서도 코드를 수정해야 합니다. 뿐만아니라 B 클래스를 사용하는 모든 클래스에서 수정 해야하는 번거로움이 발생하는데 DI 라이브러리의 경우 코드를 직접 수정하지 않아도 적절한 의존성을 주입해 줍니다. 의존성 예제 class B{ { ... class A{ var b = B() } 위 예제는 클래스 A가 B에 의존성을 갖는다라고 얘기할 수 있습니다. class B( var count : Int){ } class A{ var b = B(5) } B클래스의 생성자 파라미터가 변경..