본문 바로가기

전체 글

(163)
안드로이드12 Splash Screen 안드로이드 12 에서 기본 Splash Screen 관련 내용이 추가되었다. SplashScreen API 를 사용하면 이전 버전에서도 적용할 수 있다. 단, 애니메이션과 브랜드 이미지는 불가능 implementation 'androidx.core:core-splashscreen:1.0.0' cold start, warm start 일 때 발생하며, 앱이 첫 프레임을 그리는 즉시 닫힌다. 개발자가 정의한 테마와 애니메이션을 사용하여 스플래시 화면을 표시한다. 우리가 커스텀 할 수 있는 영역은, 1. 단색 배경색 설정 @color/... // Android 12 이상 @color/... // API 적용하여 사용할 떄 2. 아이콘 설정 @drawable/... 벡터 드로어블이어야 한다. 기본적으로 앱 런처..
Android 13 변경사항 정리 성능 및 배터리 - FGS (포그라운드 서비스) 작업 관리자 ㄴ 앱은 사용자가 시작한 중지 작업을 처리할 수 있어야 한다. - JobScheduler 를 사용하여 작업 미리 가져오기 처리 개선 ㄴ 다음에 앱이 실행될 시점을 추정하여 실행할 모든 작업을 미리 가져오기 작업으로 처리하도록 시도해야함 - 배터리 리소스 사용률 ㄴ 시스템이 '제한됨' 앱 대기 버킷에 앱을 배치하는 경우에 적용되는 규칙 업데이트 ㄴ 사용자가 앱의 백그라운드 배터리 사용을 '제한됨' 상태로 설정한 경우 앱이 실행할 수 있는 작업에 관한 새로운 제한사항 - 우선순위가 높은 FCM 할당량 ㄴ 더 이상 앱 대기 버킷에서 결정하지 않으며, 우선 순위가 높은 FCM 은 사용자에게 표시되는 알림 수에 비례하여 확장 개인정보 보호 - 알림 런타..
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..
안드로이드 Logger Util Logger Util 을 만들어서 클래스, 메소드 명만 출력하면서 사용하고 있었는데 MainActivity.java:123 이런 형태로 출력하면 해당 라인으로 바로 이동도 가능하다고 한다. object Logger { private val isDEBUG = BuildConfig.DEBUG fun d(message: String) { if (isDEBUG) { Log.d(tag(), message) } } fun e(message: String) { if (isDEBUG) { Log.e(tag(), message) } } fun i(message: String) { if (isDEBUG) { Log.i(tag(), message) } } fun w(message: String) { if (isDEBUG) ..
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 는 하나..
이펙티브 자바 규칙3. private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하라 싱글턴 객체를 하나만 만들 수 있는 클래스이다. 1. 정적 멤버를 final 로 선언한다. (private 생성자 , static 멤버) private 생성자는 public static final 필드인 인스턴스를 초기화할 때 한 번만 호출되기 때문에 항상 같은 객체를 참조한다. public class Singleton1{ public static final Elvis INSTANCE = new Singleton1(); private Singleton1(){...} } Singleton1 singleton1 = Singleton1.INSTANCE; // 항상 동일한 인스턴스 참조 Singleton1 singleton11 = Singleton1.INSTANCE; // 항상 동일한 인스턴스 참조 System..
외부 앱에 공유하기 이슈 (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 값 적용..