jetpack 11

[Android] Compose에서 BindService 사용하기

https://developer.android.com/develop/background-work/services/bound-services 바인딩된 서비스 개요  |  Background work  |  Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 바인딩된 서비스 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 바인드된 서비스란 클라이언트-developer.android.com가끔씩 앱이 실행중이지 않을 때 앱이 백그라운드에서 무언가 작업이 실행되어야 하는 경우가 있습니다.예를 들면 만보기, 파일 업로드/다운로드, 음악 플레이어 등과 같은 것들이 있습니다.이런 것들은 보통 서비스를 활용해서 구현하게 됩니다...

개발/Android 2025.03.20

Android - DataStore로 SharedPreferences를 대체하자.

어플리케이션을 개발하다보면 앱 내부에 데이터를 저장해야 할 때가 있다. 그 중에서 어떤 유저가 특정 기능을 활성화 했는지 여부와 같이 굉장히 작은 규모의 데이터가 저장되어야 할 때가 있다. 이럴때 우린 SharedPreferences를 사용해서 저장하곤 했다. 하지만 SharedPreferences는 여러가지 단점이 있다. UI쓰레드에서 호출하기에 안전하지 않고, 예외나 런타임 안정성 등이 있다. 그리고 비동기 API에 대한 대응도 부족한 편이다. 이런 단점 때문인지, 구글에서 이를 보완하기 위해 Jetpack DataStore를 개발하였다. https://developer.android.com/topic/libraries/architecture/datastore?hl=ko 앱 아키텍처: 데이터 영역 -..

개발/Android 2023.07.07

Android - Deep dive into LiveData - 4. MediatorLiveData

이전 포스팅에서 Transformations를 사용하여 LiveData를 다른 LiveData로 변화시켰다. 이번 포스팅은 Transformations 내부에서 사용한 MediatorLiveData에 대해 알아본다. https://developer.android.com/reference/android/arch/lifecycle/MediatorLiveData MediatorLiveData | Android Developers Stay organized with collections Save and categorize content based on your preferences. The android.arch Architecture Components packages are no longer maintain..

개발/Android 2023.04.01

Android - Deep dive into LiveData - 3. Transformations(map, switchMap)

LiveData를 사용할 때 LiveData가 변경되었을 때 값을 수신하고 다른 형태의 데이터로 변환해야 하는 경우가 있다. 예를들면 아래와 같은 상황을 보자. data class User( val firstName: String, val lastName: String, val nickName: String, ... ) private val _userLiveData: MutableLiveData = MutableLiveData() User 객체를 얻어왔을 때, UI에는 firstName과 lastName만을 수신해야한다고 가정해보자. Activity/Fragment에서 User를 UI에서 가공해야 할까? 이는 바람직하지 않다. 왜냐하면 데이터의 가공은 ViewModel 레이어에서 이루어지고, UI는 단지..

개발/Android 2023.01.28

Android - Deep dive into LiveData - 2. setValue vs postValue

LiveData를 사용할 때, 데이터의 변경은 어떻게 할 수 있을까? 제목에도 나와있듯이, setValue와 postValue가 있다. 왜 두 가지 방법이 있을까? 무슨 차이가 있는지 알아보자. public abstract class LiveData { ... /** * Sets the value. If there are active observers, the value will be dispatched to them. * * This method must be called from the main thread. If you need set a value from a background * thread, you can use {@link #postValue(Object)} * * @param value ..

개발/Android 2023.01.21

Android - Deep dive into LiveData - 1. LiveData가 무엇인가요?

안드로이드 앱 개발에 가장 많이 활용되는 Jetpack Component를 꼽으라고 한다면 LiveData는 손에 꼽힐 것이다. 앱 규모가 커지고 복잡해지면서 상태관리가 중요해졌다. 그러다보니 자연스레 MVVM도 표준 아키텍처로 자리잡혔고, 이를 충분히 활용하기 위해 ViewModel과 LiveData가 사용된다. 이번 포스팅 주제로, 안드로이드 프레임워크에서 상태관리를 하기위해 안성맞춤인 LiveData에 대해 자세히 알아본다. LiveData? 공식 문서에서 소개하는 LiveData를 꼭 읽어보길 바란다. https://developer.android.com/topic/libraries/architecture/livedata?hl=ko LiveData 개요 | Android 개발자 | Android ..

개발/Android 2023.01.21

Android - LifecycleOwner vs ViewLifecycleOwner

Android 앱을 개발하면서 가장 기본적이고 중요한 것 중 하나는 앱의 생명주기라고 생각한다. 생명주기, Lifecycle은 Activity, Fragment, Service 와 같은 앱의 구성요소에 따라 다르다. 흐름은 어느정도 비슷하지만, 호출되는 함수가 다른 등의 차이가 있다. 현재 Android앱을 개발하면 Jetpack을 너무나도 당연히 사용하게 되고, LiveData와 ViewModel 또한 활용하고 있을 것이다. 그러다보면 자연스럽게 LifecycleOnwer, ViewLifecycleOwner에 대해 알게 된다. 그렇다면 이 둘의 차이는 무엇인지 정리해보자. LifecycleOwner가 뭐야? 먼저, LifecycleOwer에 대해 알아보자. https://developer.android..

개발/Android 2023.01.15

[Android] Fragment Lifecycle - onCreateAnimation 은 무엇일까?

안드로이드 앱을 개발하다보면 Fragment를 자주 사용하게 된다. 특히, Jetpack Navigation Component를 사용한다면 Fragment 기반의 Single Activity Application으로 개발하게 될 것이다. 그러다보니 Fragment의 Lifecycle에 대한 이해가 중요해지게 되었다. Fragment는 Activity와 달리, Fragment가 Attach, Detach되는 함수와 뷰가 생성되고 파괴되는 함수가 Lifecycle에 존재한다. 그런데 여기서 잘 알려지지 않은 라이프 사이클 함수도 있다. 바로 onCreateAnimation이다. package androidx.fragment.app; public class Fragment { ... /** * Called w..

개발/Android 2023.01.14

[Android] Clean Architecture With Pokedex (feat. Jetpack Compose, Hilt) - 4

이번 포스팅은 Presentation 레이어를 구현한다. 즉, presentation 모듈을 구현하게 된다. presentation 레이어는 앱의 UI, UI에 보여줄 데이터를 획득하는 기능을 담당한다. UI를 그리기 위해 Compose를 활용할 것이며, UI의 데이터, 즉 상태를 관리하는 기능은 ViewModel을 활용할 것이다. 먼저 포켓몬 리스트 데이터를 담당하는 ViewModel을 구현해보자. @HiltViewModel class PokemonListViewModel @Inject constructor( getPokemonListUseCase: GetPokemonListUseCase ) : ViewModel() { val pokemonList = getPokemonListUseCase .invok..

개발/Android 2023.01.01

[Android] Jetpack Compose + Flow로 네트워크 연결 상태 처리를 해보자.

저는 안드로이드 관련된 Medium 포스팅을 메일로 전달받고 있습니다. 최근 제목과 같이 Jetpack Compose와 Flow를 활용하여 네트워크 연결 상태 처리를 하는 포스팅을 보고 예제를 간단하게 작성하여 포스팅하려 합니다. 참고한 Medium 링크는 아래와 같으니, 원문을 보고 싶다면 참고하면 됩니다. https://attilaakinci.medium.com/network-connectivity-on-compose-a35f6efa1a5c Network Connectivity on Jetpack Compose Brief story on network connectivity usages on modern android development style with jetpack compose support..

개발/Android 2021.12.26
반응형