d2fault
-
ContentObserver 알아보기Android 2023. 3. 6. 22:29
개요 타 패키지의 DB 값을 ContentProvider 로 읽어오는 로직 개발 중 DB 값이 변경되었을 때의 이벤트를 수신하고 싶었다. 가장 쉽게 구현하는 방법으로는 DB 변경을 알려주는 Intent 규격을 하나 생성하는 것이겠지만, 구글링을 통해 내가 원하는 기능을 Android 플랫폼에서 자체적으로 제공한다는 사실을 알아냈다! (나만 몰랐던 이야기…?) 단, ContentObserver는 Oreo 이상에서만 동작한다. Oreo 미만 단말에서는 Intent 를 사용해야 하겠지요? ContentObserver 가 뭔데? 이름 그대로 ‘Content를 관찰’하다가 변경이 생겼을 때 알려주는 친구다. 즉, 우리는 변경을 관찰하고 싶은 URI 를 등록하기만 하면 된다. BroadcastReceiver 사용할..
-
SDK를 어떻게 설계하고 개발했는가Android 2023. 3. 6. 21:03
개요 기존에 내가 하던 업무는 하이브리드 앱 개발을 위한 API를 설계하고, 제공하는 것이었다. 어쨌거나 유지보수이기 때문에 일은 늘 비슷했다. (어떻게든 구조를 개선해 보고자 노력했지만 혼자만의 노력이었다는 후문이^_ㅠ) 그러던 중 굉장히 갑작스럽게 SDK를 기획, 설계, 개발, 테스트까지 해야 하는 상황이 되었다. 그것도 상반기에 하나, 하반기에 하나 총 두 건이나… 유경험자나 인력은 당연히 없었기 때문에 바닥부터 시작해야 했다. 그래서 이 글은, SDK를 위해 북도 치고 장구도 친 삽질기이다. 설계부터 막막해요 안드로이드 개발자라면 새로운 프로젝트 설계 시 이미 만들어진 패턴(MVC, MVP, MVVM 등) 중 프로젝트에 적합한 패턴을 적용한다. 그리고 나 또한, 첫 번째 SDK를 설계할 때 MVV..
-
Fullscreen으로 동작하는 Custom Dialog 만들기Android 2023. 3. 5. 12:49
개요 Fullscreen으로 동작하는 Dialog를 만드는 방법으로는 크게 두 가지가 있다. Dialog처럼 보이는 Activity를 만들어 띄우기 Dialog를 Customizing하여 Fullscreen으로 띄우기 둘 중 어떤 것이 베스트라고 할 수는 없지만, 기왕이면 ‘다이얼로그’라는 이름답게 2번 방식을 따라 보기로 했다. 최초 작성 코드 언어는 java였으나 kotlin으로 변경하였고, findViewById 대신 ViewBinding 을 적용하였다. 완성본 미리 보기 SHOW DIALOG 버튼 클릭 시 Fullscreen으로 동작하는 Dialog가 출력되고, SUBMIT/CANCEL 버튼 클릭 이벤트와 동시에 Toast가 출력되는 예제 앱이다. 코드 작성 MyCustomDialog 라는 이름의..
-
코루틴(Coroutine)의 일시 중단 함수 사용하기Kotlin 2023. 3. 4. 02:13
Composing Suspending Functions 이번 포스팅에서는 코루틴의 일시 중단 함수를 조합하여 활용하는 방법을 알아본다. ※ IntelliJ나 Android Studio가 설치되어 있지 않다면 Kotlin 공식 사이트에서 지원하는 온라인 IDE(Kotlin Playground)를 사용하여 아래 코드를 실행할 수 있다. Sequential by default 아래 코드는 어떤 유용한 기능(?) 두 가지를 순차적으로 실행 및 조합하여 결과를 내도록 구현되어 있다. fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefulTwo() printl..
-
코루틴(Coroutine) 취소와 타임아웃Kotlin 2023. 2. 26. 15:09
Cancellation and Timeouts 이번 게시글에서는 코루틴의 취소와 timeout 처리에 대해 알아보자. ※ IntelliJ나 Android Studio가 설치되어 있지 않다면 Kotlin 공식 사이트에서 지원하는 온라인 IDE(Kotlin Playground)를 사용하여 아래 코드를 실행할 수 있다. Cancelling coroutine execution launch에서 반환되는 job 객체는 코루틴을 취소할 수 있는 기능을 제공해 준다. fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // delay a ..
-
코루틴(Coroutine) 기본 개념 이해하기Kotlin 2023. 2. 24. 13:05
Coroutine? 루틴의 일종으로, 협동 루틴으로 이해하면 쉽다. 코루틴의 “Co”는 with, together를 뜻한다. 코루틴은 자신의 실행이 마지막으로 중단된 지점 다음의 포인트부터 동작을 재개한다. 즉, 순차 실행이 가능하다. (tmi) 코루틴 최초의 출판물은 1963년에 등장했다. 러닝 커브는 다음 그림 참고(출처 바로가기) ※ IntelliJ나 Android Studio가 설치되어 있지 않다면 Kotlin 공식 사이트에서 지원하는 온라인 IDE(Kotlin Playground)를 사용하여 아래 코드를 실행할 수 있다. Your First Coroutine 아래 코드를 실행하면, fun main() { GlobalScope.launch { // launch a new coroutine in b..