Android87 [Android] 에뮬레이터에서 localhost 접속하기 문제 배경 이번에 Network 관련 작업을 위해 localhost로 API를 만들고 연결하는 과정에서 문제가 발생했습니다. 서버의 Base Url을 http://localhost로 작성했더니 인식하지 못하는 문제였습니다. 문제 해결 안드로이드 공식 홈페이지 네트워킹 설정 을 보면 아래와 같은 표를 확인할 수 있습니다. 즉 localhost 의 형태가 아닌 http://10.0.2.2로 접근해야 에뮬레이터에서 인식하게 됩니다. 2022. 12. 22. [Coil] 이미지 로딩 속도 체크하기 .listener를 붙여서 시간을 측정하면 됩니다. Log.d("ImageProcessTime", "$funcName Coil 시작") val coilStartTime = System.currentTimeMillis() imageView.load(imageUrl) { crossfade(true) listener { request, result -> val coilEndTime = System.currentTimeMillis() Log.d("ImageProcessTime", "$funcName processTime: ${(coilEndTime - coilStartTime) / 1000}") } } 2022. 12. 4. [Glide] 이미지 로딩 속도 체크하기 .listener를 붙여서 RequestListener 구현 -> onResourceReady 안에서 준비완료된 시간을 측정하면 됩니다. val glideStartTime = System.currentTimeMillis() Glide.with(this) .load(imageUrl) .listener(object : RequestListener { override fun onLoadFailed( e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean, ): Boolean { return false } override fun onResourceReady( resource: Drawable?, model: Any?, target: .. 2022. 12. 4. [Image Loader Library] Glide VS Coil 알아보자! Android를 사용하는 많은 분들은 이미지 로딩을 처리할 때 Glide를 사용할 것이라고 생각합니다. 그래서 오늘은 새로운 Coil에 대해 소개해보고자 합니다! 1. Coil은 뭐지?? Coil은 Coroutine Image Loader의 약자로 Kotlin Coroutine으로 만들어진 가벼운 Android 이미지 로딩 라이브러리입니다. 코일에서는 총 4가지 장점을 위주로 소개하고 있습니다. Fast Coil performs a number of optimizations including memory and disk caching, downsampling the image in memory, automatically pausing/cancelling requests, and more. 코일은 메모리 .. 2022. 12. 4. [Android] AAC ViewModel 과 MVVM ViewModel MVVM ViewModel이란? MVVM 패턴 (Model - View - ViewModel)은 MVP 패턴에서 파생된 패턴입니다. MVVM 패턴의 목표는 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하는 것입니다. 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하게 되면 테스트, 유지 보수, 재사용 측면에서 용이합니다. 기존의 MVP 패턴 (View - Presenter - Model)에서 View와 Presenter는 1:1 관계로 View에서 요청한 정보로 Model을 가공하여 View에 전달해줍니다. 즉 연결다리 역할을 하는 것입니다. 이러면 View와 Presenter 사이의 의존성이 높아져 문제가 발생합니다. 반대로 MVVM 패턴은 View 와 ViewModel 사이의 의존성이 없.. 2022. 9. 28. [Android] Fragment에서 add()와 replace() 차이점 배경 보통 fragment를 사용할 때 replace를 주로 사용해왔는데 add()와 replace()가 과연 어떤 차이점이 있는지 체크해보기로 했습니다. add() 와 replace()의 차이 add()는 기존의 프래그먼트 위에 추가하는 것이고 replace()는 이전 프래그먼트들을 제거한 후에 새로운 프래그먼트를 추가한다는 차이점이 있습니다. 기존의 fragment 설정 Activity: onCreate() -> Fragment: onAttch - onCreate - onCreateView - onViewCreated - onViewStateRestored - onStart -> Activity: onStart - onResume A fragment에서 B fragment로 replace()할 경우 .. 2022. 9. 27. [Android] Fragment 생명주기 Fragment란? 프래그먼트란 액티비티 내에 배치되어 사용자 인터페이스를 구성하는 안드로이드 구성요소 중 하나입니다. 액티비티 내의 일부 영역을 차지하여 화면을 구성할 수 있으며 독립적으로 동작할 수 있어 매우 유용합니다. CREATED: Fragment의 생명주기가 CREATED된 상태라면 이미 onAttach()를 통해 FragmentManager에 추가된 상태입니다. 이 상태에서 데이터를 초기화,복구하거나 저장된 상태를 불러옵니다. STARTED: Fragment 안의 View들이 표시되지만 '포커스'가 없으므로 사용자 입력에 응답할 수 없습니다. RESUMED: Activity와 마찬가지로 사용자와 Fragment가 상호작용하는 단계입니다. STARTED: Fragment의 onPause()를 .. 2022. 9. 27. [Android] ViewPager2 - onAttachedToRecyclerView Error 배경 Fragment에 ViewPager2를 붙이고 다른화면으로 전환 후에 다시 돌아오면 에러가 발생하면서 앱이 터지는 현상을 발견했습니다. 에러 내용 java.lang.IllegalArgumentException at androidx.core.util.Preconditions.checkArgument(Preconditions.java:38) at androidx.viewpager2.adapter.FragmentStateAdapter.onAttachedToRecyclerView(FragmentStateAdapter.java:132) at androidx.recyclerview.widget.RecyclerView.setAdapterInternal(RecyclerView.java:1243) at androi.. 2022. 9. 21. [Android] 멀티 Module에서 발생하는 google-services.json is missing 오류 저 같은 경우 라이브러리에서 firebase 라이브러리를 사용하려고 할 때 plugins 쪽에 아래 코드를 추가한 것이 문제였습니다. app 하위 모듈에서 firebase 라이브러리를 사용하고 싶다면 플러그인에 추가하지 않고 dependencies에만 추가해주시면 됩니다. id("com.google.gms.google-services") https://stackoverflow.com/questions/41913984/use-external-google-services-json-file-in-library/41920680#41920680 Use external google-services.json file in library I'm sharing a single login module across my a.. 2022. 9. 9. 이전 1 ··· 3 4 5 6 7 8 9 10 다음