Android/JETPACK

    [JETPACK개론] Paging

    [JETPACK개론] Paging

    Jetpack Paging 라이브러리는 말 그대로 하나의 문서를 분리된 페이지로 나누는 것. 즉, 데이터가 클 때 작은 단위로 쪼개서 사용하는 곳에 적용된다. 예를 들어 구글에 안드로이드를 검색했을 때 수십억개의 결과가 나온다. 이를 한 번에 전달한다면 엄청난 트래픽이 발생할 것이다. 따라서 검색 결과를 10개씩 페이징해서 보여준다. 안드로이드 공식문서에 따르면 대규모 데이터 세트의 데이터 페이지를 로드하고 표시할 수 있다고 나와있다. 직접 paging을 구현하려면 너무 어려운 점이 많기 때문에 구글에서는 paging 라이브러리를 발표했다!! 페이징은 프로젝트의 적절한 관심사를 분리를 요구하며 안드로이드 권장 아키텍처에 통합되도록 만들어졌으며, 위와 같이 작동된다. 개별데이터가 PagingSource로 ..

    [JETPACK개론] DataStore

    [JETPACK개론] DataStore

    기존 프로젝트에서 서버에서 받은 로그인 토큰값을 간단하게 저장하기 위해 SharedPreferences를 사용하여 저장하였다. 복잡한 대규모 데이터가 아닌, 소규모였기 때문에 Room을 사용하기보다 SharedPreferences를 사용해서 저장했다. DataStore는 SharedPreferences의 단점을 보완하며 등장했다. DataStore가 데이터처리에 Flow를 도입했기 때문에 스레드나 예외처리 부분에서 개선되었다. ui스레드에서 안전하게 call할 수 있고, 예외처리에서도 안전해졌다. 이렇게 여러 가지 단점들을 보완하며 나타난 것이 DataStore이다. DataStore에는 다음과 같이 두 가지 유형이 존재한다. 이 글에서는 키를 사용하여 데이터를 저장하고 데이터에 엑세스하는 Prefere..

    [JETPACK개론] Navigation

    [JETPACK개론] Navigation

    여태까지 진행했던 프로젝트에서 꼭 빠짐없이 Navigation을 도입하였다. 왜냐하면 프래그먼트간의 이동을 쉽게할 수 있고, 데이터전달을 기존의 방식보다 안전하게 할 수 있기 때문이다. 전에 트러버 프로젝트에서 Bottom Navigation과 Jetpack Navigation을 연결하면서 쓴 글이 있다. [Android] JetPack Navigation으로 Bottom Navigation 설정하기 안드로이드를 공부하면서 간단한 화면 전환은 intent로 구현했었다. 하지만 레이아웃이 복잡해질수록 코드가 길어지며 가독성이 떨어지는 문제점을 확인할 수 있었다. 이 경우를 해결하기 위해 J ssongcode.tistory.com 기존에 썼던 글이 있지만, 이번에 한번 더 정리하면서 Navigation을 왜..

    [JETPACK개론] WorkManager(5) + 주기적작업, 고유작업

    [JETPACK개론] WorkManager(5) + 주기적작업, 고유작업

    주기적작업 경우에 따라 앱에서 특정 작업을 주기적으로 실행해야 할 수 있다. 예를 들어 주기적으로 데이터를 백업하거나 최신 컨텐츠를 앱에 다운로드 하거나 로그를 서버에 업로드해야 할 수 있다. 이 때 주기적으로 실행되는 WorkManager를 만들 수 있다. class WorkManager1(context : Context, workerParameters: WorkerParameters) : Worker(context, workerParameters){ override fun doWork(): Result { Log.d("WorkManager1", "doWork") val format = SimpleDateFormat("hh:mm:ss") val currentTime = format.format(Date..

    [JETPACK개론] WorkManager(4) + 작업진행률 관찰

    [JETPACK개론] WorkManager(4) + 작업진행률 관찰

    WorkManager는 앞서 포스팅했던 내용 이외에도 getWorkInfoByLiveData메소드 중 하나를 사용하여 현재 작업 진행률 정보를 관찰할 수도 있다. CoroutineWorker 객체의 setProgress함수를 사용하여 진행률 정보를 업데이트 할 수 있다. 공식문서를 봐도 getWorkInfoBy..() 또는 getWorkInfoByLiveData() 메소드 중 하나를 사용하여 정보를 관찰할 수 있고 이 메소드는 Data를 반환하는 새 getProgress() 메소드가 있는 WorkInfo의 인스턴스를 반환한다고 나와있다!! 다음 예시를 살펴보자! class WorkManagerTest(context : Context, params : WorkerParameters) : CoroutineW..