1. Service 란? Service는 안드로이드 4대 컴포넌트 중 하나이며 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행됩니다. 또한 앱 구성요소와 서비스를 바인딩하여 서비스와 상호작용 할 수 있고, 프로세스 간 통신(IPC)도 실행할 수 있습니다. 2. Service 종류 포그라운드 서비스: 알림창을 통해 서비스가 실행중인 것을 나타내줍니다. 대신, 시스템에 의해서 강제종료 당하지 않습니다. 백그라운드 서비스: 사용자에게 보이지 않고 작업을 수행합니다. 대신, 시스템에서 리소스가 부족할 경우 강제종료 당할 수 있습니다. (API ..
CustomView를 만드는 이유 Android에는 UI를 구성하는 데 사용할 수 있는 미리 빌드된 기본 클래스인 View 및 ViewGroup과 다양한 서브클래스(위젯 및 레이아웃)가 있습니다. 어플리케이션의 UI 요구사항에 요청하는 위젯의 기능과 UI가 안드로이드에서 기본으로 제공하는 위젯이 제공을 한다면 위젯을 골라서 사용하면 되겠지만, 기본으로 제공하는 위젯이 요구사항에 맞지 않다면 CustomView를 직접 만들어야 합니다. CustomView의 장점으로는 매번 레이아웃으로 일일히 만드는 것 보다 CustomView를 만드는 것이 앱의 생산성에 도움이 됩니다. CustomView를 만들기 위해서는 View 및 ViewGroup 혹은 안드로이드에서 제공하는 위젯을 상속받고 메소드와 레이아웃을 상속..
Dagger의 가장 큰 장점은 계층관계의 오브젝트 그래프를 만들 수 있다는 것 입니다. 이번에 다룰 @Subcomponent와 @Scope를 이용하면 오브젝트 그래프를 이용하여 앱 구성요소의 생명주기 동안 메모리 할당과 해제를 효율적으로 관리할 수 있게 해줍니다. Application(Singleton) Scope 지정 먼저, Application Scope를 가져야하는 클래스들(Repository, DataSource 등등....)은 앱이 실행되는 동안 인스턴스가 메모리에 있기를 원하기 때문에 Application의 생명주기와 동일한 범위를 따르는 오브젝트 그래프를 만듭니다. 이렇게 하면 그래프는 앱 수명 주기에 연결됩니다. 그래프를 생성하는 인터페이스는 @Component로 주석이 지정되므로 Appl..
에러 내용 * What went wrong: Execution failed for task ':app:mergeReleaseResources'. > A failure occurred while executing com.android.build.gradle.internal.res.Aapt2CompileRunnable > AAPT2 aapt2-4.2.1-7147631-linux Daemon #0: Compile '/home/circleci/project/app/src/main/res/drawable/app_icon.png' timed out, attempting to stop daemon. This should not happen under normal circumstances, please file an ..
Dagger에는 단일 데이터를 주입받는 방법 외에도, 자료구조를 이용하여 n개의 데이터를 주입받는 방법이 있습니다. 대표적으로 Set과 Map을 이용하는 방법이 존재합니다. Set MultiBinding 먼저, Set을 이용한 MultiBinding입니다. SetModule.kt @Module class SetModule { @Provides @IntoSet fun provideHello(): String = "Hello" @Provides @IntoSet fun provideWorld(): String = "World" @Provides @ElementsIntoSet fun provideSet(): Set { return HashSet(listOf("seosh", "817")) } } @IntoSet을..
이번 포스트에서 다룰 내용은 Qualifier 어노테이션입니다. 이름 그대로 객체를 식별해주는 어노테이션입니다. @Named Qualifer Dagger는 의존성 주입을 요청했을 때 Module에 선언된 자료형(Type)과 동일한 객체를 주입해줍니다. 따라서, Module에 동일한 Type의 객체가 여러개 선언되어 있을 경우, 컴파일 타임에 에러를 발생하게 됩니다. 의존성주입은 Interface를 기반으로하는 코드를 권장하므로, 같은 부모를 가진 여러 Child 클래스가 존재할 가능성이 매우 높습니다. 이러한 경우를 위해서 @Named 어노테이션을 통해서 같은 타입의 여러 객체를 선언하고 주입해줄 수 있습니다. 사용법은 간단합니다. Module의 @Provides어노테이션과 @Injection 어노테이..
Lazy 혹은 Provider를 사용하면 의존성 주입의 시점을 늦추거나 항상 새로운 객체를 반환 받을 수 있도록 할 수있습니다. Lazy Injection vs Provider Injection Cpu 객체는 Provider를 통해 주입해주고, Ram 객체는 Lazy를 통해 주입해주도록 해주겠습니다. ComputerComponent.kt @Component(modules = [ComputerModule::class]) interface ComputerComponent { fun inject(computer: Computer) @Component.Builder interface Builder { fun computerModule(computerModule: ComputerModule): Builder fu..
Dagger란? Dagger는 자바 안드로이드에서 사용 가능한 정적 컴파일타임 의존성주입 프레임워크 입니다. Annotation Proccessor를 통해 컴파일 타임에 어노테이션을 읽고 의존성 주입에 필요한 클래스들을 생성합니다. 어노테이션 처리를 컴파일 시점에 별도의 프로세서에서 처리하므로 성능이 향상되고, 클래스 Reflection을 사용하지 않으므로 Runtime Exception 발생을 막으며 Proguard 설정의 번거로움에서 벗어날 수 있습니다. Module Module에서 하는 역할은 @Provides,@Binds를 통해 주입할 클래스의 인스턴스를 생성합니다. 메소드의 반환 타입을 통해서 주입할 객체를 정하며, 반환타입이 같을 경우 @Qualifier를 통해 주입할 객체를 지정할 수 있습니..