Android/이론 학습 12

[Android/Compose] Composable 에서 Runtime permission 요청하기

최근에 처음으로 Notification 런타임 권한요청을 할 일이 생겨서 정리하는 시간을 가져보았다. (링크 첨부) 사이드 프로젝트는Jetpack Compose 100% 로 진행하고 있는데 Composable 함수에선 어떻게 런타임 권한요청을 할지 궁금해졌다. 직접 만들어 쓸 수도 있겠지만 권한처럼 필수적인 기능은 공식에 가까운 라이브러리가 있을 것 같았다. 찾아본 결과 google 레포의 accompanist 에 Permission 섹션이 있었다. 간단한 사용법과 구현 코드 그리고 주의점에 대해 알아보자. 사용방법 간단하게 정리 먼저 아래와 같이 권한을 추가해준다. 버전은 현재 프로젝트의 Compose 버전을 확인하여 리드미에 나와있는대로 accompanist 라이브러리의 버전을 설정한다. implem..

[Android/GraphQL] Apollo Kotlin (시작 ~ 쿼리실행)

[목차] - 도입 - 용어 정리 - 프로젝트에 Apollo 추가하기 - Schema 추가하기 - 쿼리 추가하기 - 쿼리 실행하기 - 마무리 [도입] 이름과 대략적인 내용만 들어보고 써보진 않았다. 최근에 쓰게될 일이 생겨서 그 전에 테스트 겸 셀프 실습을 진행해본다. 모킹 서버를 어디서 찾을까 하다가 Rick and morty (예전에 즐겨본 애니메이션) api 가 눈에 들어왔고 Apollo, GraphQL 공식문서를 참고하여 적용하려 한다. 설레는 마음으로 시작! 릭앤모티 api Documentation This documentation will help you get familiar with the resources of the Rick and Morty API and show you how to m..

[Android/Firebase] 기존 프로젝트에 Crashlystics 적용하기

[선 반성] Firebase Crashlytics 는 실시간으로 내가 에러를 확인할 수 있게 해주는 툴이다. 지능적으로 크래쉬를 묶어주고 그 문제가 난 상황을 강조해서 개발자의 트러블슈팅 시간을 줄여준다. 마일스톤에 맞춰 앱 런칭이 제 1의 목표였던 시기를 지나 서비스를 고도화하기 위해 도입을 시작한다. 이제야 적용하게 되는 것을 반성한다. 이번 글은 도입 자체가 주이고(그래서 이론/학습 카테고리) 활용도 (실전/회고 카테고리에) 앞으로 쓸 예정이다. [시작해보기] 시작하려면 먼저 Firebase 에 Crashlytics 를 사용하려는 안드로이드 프로젝트를 등록해야한다.등록이 되어있음을 전제한다.그럼 Firebase Crashlytics 시작하기 | Firebase Documentation Join Fi..

[Kotlin/백준] 5430, AC (시간초과 해결)

[도입] 명령어 문자열와 배열을 주고 각 명령어가 R 이면 뒤집고 D 면 앞 원소를 빼서 결과를 반환하는 문제 자세한 내용은 아래 링크를 참고 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net [잘못된 풀이] 처음에 아래 방식처럼 reversed 와 drop 을 사용해서 계속해서 새로운 리스트를 생성하고, 심지어 reversed 는 내부 구현을 살펴보니 O(N) 인데 그걸 매번 불러서 시간초과가 났었다. 그것도 모르고 R 두 번 연속인 거 지우고 D 연속으로 나오면 일괄처리하는 등의 삽질을 했다. 아래는 그 초기 코드이다. import java.io.BufferedR..

[Android] WorkManager 로 복잡한 백그라운드 작업을 쉽게 해결한다고? (기본 사용법과 예시코드 포함)

[공부하게된 계기] 안드로이드 공부를 시작하고 스레드를 이용한 적은 있지만 앱 프로세스가 죽어서도 백그라운드에서 작업하게 할 일이 없었다. 하지만 최근 타이머 관련 오픈소스 작업을 시도하며, 그리고 과제전형 문제를 풀면서도 백그라운드 작업을 공부하게 되었는데 백그라운드 관련 라이브러리 중에서 최근 가장 핫한 WorkManager 를 공부해야겠다고 생각했다. [그래서 WorkManager 뭘 하는 건가?] 백그라운드 세 가지 작업종류의 persistent work 를 다루는데 추천되는 라이브러리이다. 백그라운드 작업의 종류에 관해서는 내가 전에 써놓은 아래링크를 참고하면 된다. [Android] 안드로이드의 Background 작업 Background 작업이 필요할 때! UI 스레드로 실행이 오래걸리는 작..

[Android] Service 의 타입과 사용법 그리고 권장사항

[서비스란?] 안드로이드 앱 4대 컴포넌트 중하나이다. 즉 앱 프로세스의 진입점 중 하나이다. (유저가 앱과 상호작용하고 있지 않아도) 백그라운드에서 길게 실행되는 연산들을 수행할 수 있다. (Activity 와는 다르게 UI 제공 x) 그러니 어플리케이션이 실행 중이지 않을 때도 ((아마) 앱 프로세스를 강제 종료 하지 않는 한) 작업해야하는 경우 서비스를 사용. (어플리케이션이 실행 중일 때만 작업해야하는 경운 스레드권장) 다른 앱으로 이동해도 한동안 실행을 지속할 수 있다. 한 컴포넌트와 bind 하여 소통할 수 있고, IPC(interprocess communication) 도 가능 주의할 점은 위 설명에서 백그라운드라는 말이 나왔다고 해서 서비스가 메인스레드(UI스레드) 외의 다른 스레드에서 작..

[Android/Kotlin] Intent 에 커스텀 객체 전달하기? 직렬화, 역직렬화 Serializable 과 Parcelable, @Parcelize

[시작하며 (반성)] 한 화면에서 다른 화면으로 이동할 때 데이터를 전달하려고하는 데, Primitive type 이 아닌 내가 만든 data class(디자인 패턴을 관점에서는 POJO 클래스, Model) 을 통째로 전달하고 싶을 수 있다. 액티비티 객체는 안드로이드 시스템에서 관리하는 컴포넌트로 데이터 전달에는 Intent 를 사용하기 때문! 그리고 최근에 Jetpack navigation 으로 프로젝트를 진행해왔는데, navigation 라이브러리에서도 Serializable 과 Parcelable 을 지원해서 Fragment 간 객체를 전달할 수 있었다. Serializable 과 Parcelable 의 개념을 안드로이드 공부 시작하고 초반에 접하고 따로 더 공부한 적이 없이 자연스레 사용해서 ..

[Android] Hilt 의 다양한 어노테이션을 알아보자

[DI 가 무엇인지 모른다면?] 아래 링크를 먼저 참고하자 [Android] 안드로이드의 DI (Dependency Injection) [DI 개념과 필요한 이유] 한 클래스는 다른 클래스를 참조해야하는 일이 빈번하다. (특히 디자인패턴을 다루면서) 예를 들어 Computer 클래스를 실행시키려면 Computer 클래스 내에서 Cpu 클래스 객체 nosorae.tistory.com [Hilt 란?] 힐트는 제트팩에서 권장하는 DI 라이브러리이다. 힐트는 Dagger 위에 구축되어있고 대거 컴포넌트를 만든다. (compile-time correctness, runtime performance, scalability 측면에서 이득) 따라서 힐트 역시 compile-time dependencies, runti..

[Android] 안드로이드의 DI (Dependency Injection)

[DI 개념과 필요한 이유] 한 클래스는 다른 클래스를 참조해야하는 일이 빈번하다. (특히 디자인패턴을 다루면서) 예를 들어 Computer 클래스를 실행시키려면 Computer 클래스 내에서 Cpu 클래스 객체를 참조해야한다고 해보자. 이 상황에서 Computer 클래스가 Cpu 클래스에 의존한다고 한다. 이 방법에는 당장 생각나는 두 가지가 있을 것이다. Cpu 객체를 클래스 내부에서 직접 생성하기 Computer 클래스가 한 타입의 Cpu 객체만 사용해버린다. 즉 서브클래스를 쉽게 사용할 수 없다. 그렇다면 Intel Cpu, AMD Cpu 각각을 사용하는 Computer 클래스를 각각 만들어야 할 것이다. Computer 에서 Cpu 객체를 직접 생성하면 테스트도 어렵게 함 생성자나 메소드 파라미..

[Android] 안드로이드의 Background 작업

Background 작업이 필요할 때! UI 스레드로 실행이 오래걸리는 작업을 진행한다면 UI 블로킹으로 좋지 못한 UX 를 제공할 것이다. 따라서 bitmap 을 디코딩한다든지, 네트워크 요청이나 저장소에 접근 그리고 머신러닝 모델을 동작시키는 등의 무거운 작업을 할 때는 따로 백그라운드 작업이 필요할 것이다. Background 작업의 3 가지 카테고리와 각 2 가지 타입 백그라운드 작업은 기본적으로 아래 세 가지 카테고리로 분류됨 Immediate 당장 실행해야하고 금방 끝나는 작업 Long-running 끝나는 데 시간이 걸리는 작업, 약 10분 이상 Impersistent 권장 x Persistent 권장 o (따라서 WorkManager 사용 권장) ex 청크할 수 없는 큰 파일 다운로드하는 ..