분류 전체보기
-
Android) BroadcastReciever와 LiveData로 실시간 네트워크 연결 감지하기Android 2022. 1. 17. 19:23
NetworkInfo class NetworkManager(private val context : Context) { fun isOnline(): Boolean { val connMgr = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkInfo: NetworkInfo? = connMgr.activeNetworkInfo return networkInfo?.isConnected == true } } 기존에 네트워크 연결 상태를 감지하는 위와 같은 코드가 많이 사용됩니다. activeNetworkInfo(getActiveNetworkInfo()) 메서드를 통해 처음 연결된 네트워크 인터페이스를 찾아..
-
Android) Jetpack Compose에서 Paging 라이브러리 사용해보기Android 2021. 12. 4. 20:56
오늘은 Jetpack Compose에서 Paigng 라이브러리를 사용하는 예제를 구현해보려 합니다. Compose With Paging Paging 라이브러리를 사용해 서버로부터 데이터를 받아오는 코드는 기존의 구현 방법과 같습니다. Composable 함수에서 데이터를 렌더링 하는 방법을 보겠습니다. @Composable fun PhotoList(mainViewModel: MainViewModel) { val photos = mainViewModel.getPhotoList().collectAsLazyPagingItems() } Compose에서 리사이클러뷰와 동일한 역할을 하는 LazyColumn에서 Flow를 사용할 수 있도록 collectAsLazyPagingItems 확장 함수를 사용하여 변환합니..
-
Android) Jetpack Paging3 유닛 테스트 해보자Android 2021. 11. 28. 18:47
Paging 3 Android Jetpack에서 제공하는 페이징을 위한 라이브러리입니다. 성능, 메모리, 비용 측면에서 효율적입니다. PagingSource 네트워크 또는 데이터 베이스에서 데이터를 로드하는 추상 클래스. key 타입을 정의하여 구현합니다. LoadResult라는 sealed class에서 응답 처리와 에러 핸들링에 도움을 주기 때문에, 자체적으로 결과 클래스를 만들어 래핑 할 필요가 없습니다. 로드할 다음 페이지가 없으면 null을 nextKey에 전달, 이전 페이지가 없으면 prevKey에 전달합니다. class PicsumPagingSource(private val service: PicsumService) : PagingSource() { override suspend fun lo..
-
Android) CodeLab - Layouts in Jetpack ComposeAndroid 2021. 11. 14. 22:02
Modifiers Modifiers는 기존 View에서 xml 속성과 유사한 역할을 하는데, 범위별 Modifiers의 유형 안전성은 특정 레이아웃에 사용 가능하고 적용할 수 있는 항목을 검색하고 이해하는데 도움을 준다. 함수의 파라미터로 Modifier를 넣어주는 컨벤션을 사용하면 좋다. 전체 영역에 clickable 효과를 주고 싶을 때, padding은 clickable 뒤에 적용해주자. CompositionLocalProvider : 컴포지션 트리를 통해 암시적으로 데이터를 전달할 수 있다. @Composable fun PhotographerCard(modifier: Modifier = Modifier) { Row( modifier .padding(8.dp) .clip(RoundedCornerSh..
-
Android) CodeLab - Jetpack Compose basicsAndroid 2021. 11. 2. 23:32
Start Compose class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { BasicsCodelabTheme { // A surface container using the 'background' color from the theme Surface(color = MaterialTheme.colors.background) { Greeting("Android") } } } } } @Composable fun Greeting(name: String) { Text(text = "Hello $name!") } ..
-
Android) Jetpack Compose를 시작해보자Android 2021. 10. 2. 17:38
What is Compose? UI 개발을 간소화하고 간편하게 할 수 있도록 도와주는 툴킷. 기존의 UI는 명령형 방식이었지만, Compose는 선언형 방식. UI가 어떻게 보일지에 대한 구현에서 무엇을 보여주면 되는지에 대한 구현으로 변경. 뷰의 상태만 선언하여 구현 부분은 프레임 워크에게 맡기는 방식. 데이터가 변경되면 프레임 워크가 알아서 해당 함수들을 재호출하여 View를 업데이트. 적은 코드, 유지보수, 재사용 및 확장성 용이. 기존의 방식으로 UI를 구성하려면 View, ViewGroup에 대한 속성과 정보가 담겨 있는 layout 파일 작성. setContentView() 메서드를 이용해 layout 파일을 보여줍니다. layout 파일 내부의 TextView를 찾아 "Start Jetpac..
-
Android) MVI 아키텍처 살펴보기Android 2021. 9. 26. 17:55
Android 개발자로서 일반적으로 사용되는 패턴으로 MVC, MVP, MVVM이 있습니다. 이 패턴들은 명령형 프로그래밍 접근 방식을 사용합니다. 이 접근 방식을 사용하면 안드로이드에서 발생하는 대부분의 문제가 해결되지만, thread safety 또는 state 관리에 관련해서 여전히 몇 가지 문제에 직면할 수 있습니다. MVVM의 문제점? 기존에 많이 사용하는 MVVM 패턴을 적용하면서 직면하는 문제는 무엇일까요? 바로 상태 문제와 부수 효과입니다. Multiple Inputs : ViewModel은 많은 input, output을 관리해야 하는 경우가 있습니다. 이때 백그라운드 스레드를 사용하게 되면 thread safety 하지 못한 문제가 발생할 수 있습니다. Multiple States : ..
-
Android) 새로워진 Mavericks 2.0을 알아보자Android 2021. 9. 22. 19:40
이전에 MvRx에 대한 포스팅을 했습니다. 오늘은 Mavericks 2.0에 대한 내용입니다. Mavericks 개별적인 상태 속성을 노출하는 대신, 하나의 불변 데이터 클래스를 사용해 뷰모델을 업데이트하고 UI를 렌더링 합니다. Mavericks 1.0은 RxJava 기반으로 되어 있었는데, Mavericks 2.0에서 Coroutines로 새롭게 작성되었습니다. MVI 프레임워크로 상태 관리를 쉽게 처리하기 위해 Airbnb에서 만든 기술입니다. Coroutines, Dagger, Hilt, Jetpack Compose, Jetpack Navigation 등을 지원합니다. What is MVI? Model - 상태를 나타낸다. MVI에서 Model은 데이터 플로우가 단방향으로 이루어지기 위해 불변성을..