본문 바로가기

Kotlin/안드로이드 공부

(53)
Hilt @Provides vs @Binds 어떻게 이렇게 할 때마다 찾아보는지... 내가 쓴 글로 한 번 정리를 해둬야겠다. 가장 큰 차이점은 @Binds 는 인터페이스를 제공하고, @Provides 는 클래스 인스턴스를 제공한다는 것이다. @Binds @Module @InstallIn(SingletonComponent::class) abstract class ServiceModule { @Binds @Singleton abstract fun provideServiceHelper(threeServiceHelper: ThreeServiceHelper): ServiceHelper } 인터페이스를 제공하는 경우 바로 인스턴스를 생성할 수 없기 때문에 실제 사용되는 구현을 Hilt 에게 알려준다. @Provides @Module @InstallIn(Ac..
Android Activity Result API 기존에 사용하던 startActivityForResult() & onActivityResult() 를 대체하는 새로운 Activity Result API 가 나왔다. 기존 API 의 단점 - 강한 결합으로 코드를 다른 곳으로 분리시킬 수 없다. - 개발자의 부주의로 casting error 가 발생할 수 있다. - null pointer exception 역시 발생하기 쉬운 구조다. 새로운 API 의 장점 - 원하는 Activity Request마다 registerForActivityResult를 실행하기 때문에 requestCode가 존재하지 않는다. - onActivityResult 를 override 할 필요가 없으므로 boilerplate code 가 줄어든다. - 하나의 launcher 는 하나..
외부 앱에 공유하기 이슈 (w.안드로이드 11 패키지 공개 상태) 발생한 문제: 안드로이드 10, 11 기기에서만 공유하기 메뉴를 눌렀을 때 연결 앱이 일부만 표시된다. 안드로이드 패키지 공개 상태 안드로이드 10 이하를 대상으로 하는 경우 모든 앱이 자동으로 앱에 표시된다. 하지만 안드로이드 11 버전부터는 앱의 패키지 공개 상태를 지정하지 않으면 외부 앱의 패키지 정보에 접근할 수 없다. 다음 함수 사용시 패키지 공개 상태에 따라 영향 받음 PackageManager.getPackageInfo() PackageManager.queryIntentActivities() Intent.resolveActivity() PackageManager.getInstalledPakages() PackageManager.getInstalledApplications() bindServi..
Spans - 문자열 중 숫자에만 텍스트 효과 적용하기 Spans : 마크업 객체로 text 를 style 하는데 사용 SpannedString : 텍스트 변경 불가. 마크업 변경 불가 SpannableString : 텍스트 변경 불가. 마크업 변경 가능. SpannableStringBuilder : 텍스트 변경 가능. 마크업 변경 가능. 1. 레이아웃에서 textView 의 bufferType 속성을 spannable 로 설정한다. ( normal/spannable/editable ) 2. 코드 상에서 코드를 구현한다. val ssb = SpannableStringBuilder ("문자열") binding.textView.text = ssb.apply { setSpan(적용할 효과, 효과의 시작 지점, 효과의 끝나는 지점, 문자열 추가 시 span 값 적용..
Rxjava Single 안의 값 사용하기 1. flatMap() / flatMapCompletable() -> 각각 Single, Completable 형태로 반환하며, it 으로 Single, Completable 안의 값 사용가능 2. subscribe() -> Disposable 형태로 반환 3. blockingGet() 이름 그대로 현재 쓰레드를 blocking 시킨다. 따라서 완전한 동기 코드와 사용해야하며,observeOn(MainThread) 같이 UI 쓰레드를 사용하는 코드와는 절대 같이 사용하면 안됨! fun getInfo(): Info { 1. DB 에서 info 값을 가져온다. -> return Info or nullPointerException 2. 이때 DB에 값이 존재하지 않아 nullPointerException 에러..
Rxjava 에러 캐치 Rxjava 에서는 에러 발생시 onError 이벤트가 발생하기 때문에 기존 사용하던 try-catch 문을 사용할 수 없다. 하지만 onError 이벤트는 흐름이 중단된다는 문제점이 있다. 이때 소비자가 모든 예외를 미리 알고 처리하기는 힘드므로 생산자 쪽에서 에러를 캐치해서 사전에 예외처리를 해둘 수 있는 3가지 Operator 를 정리해보려고 한다. *Rxjava 에서는 에러도 어떠한 데이터로 본다. onErrorReturn() 에러 발생 시점에 특정 값으로 대체 + 선언적으로 예외 발생 처리 가능 .onErrorReturn { it:Throwable when (it) { is java.lang.NullPointerException -> { it.printStackTrace() } } } onErr..
RecyclerView 안에 EditText 보호되어 있는 글입니다.
Native Development Kit (NDK) SDK : UI 기반으로 특화된 API를 제공하여 Application Level에서 개발이 가능하게 도와주는 패키지 java만 사용하여 필요한 기능과 성능을 모두 만족시키기는 힘들다. 안드로이드는 자바를 활용했기 때문에 자바의 한계점을 그대로 가지고 있다. ex) 그래픽 처리, 센서 값 처리 등 CPU의 처리 속도가 중요한 부분 그래서 C나 C++ 언어로 작성된 프로그램을 java에서 사용할 수 있도록 JDK에서 제공하는 것이 JNI(Java Native Interface) 그리고 NDK는 이것을 가능하게 해주는 네이티브 개발 도구, 툴킷이다. 정의 : C/C++을 이용하여 애플리케이션, 미들웨어 개발에 사용되는 Framework NDK를 사용하여 얻을 수 있는 장점 1. 기존에 C로 만들어진 대규모 ..