앱 시작 Android Jetpack의 구성요소
앱 시작 라이브러리는 간단하고 효율적으로 초기화하는 방법을 제공합니다. 애플리케이션 시작 시 구성요소로 이루어져 있습니다 라이브러리 개발자와 앱 개발자 모두 앱 시작을 사용하여 시작 시퀀스를 간소화하고 실행 순서를 명시적으로 설정할 수 있음 매우 중요합니다
모든 구성 요소에 대해 별도의 콘텐츠 제공자를 정의하는 대신 앱 시작을 사용하면 앱 시작을 통해 앱 시작을 통해 단일 콘텐츠 제공자일 가능성이 높습니다. 이렇게 하면 앱 시작 시간이 크게 개선됩니다.
설정
라이브러리나 앱에서 Jetpack Startup을 사용하려면 Gradle에 다음을 추가합니다. 파일:
Groovy
dependencies { implementation "androidx.startup:startup-runtime:1.2.0" }
Kotlin
dependencies { implementation("androidx.startup:startup-runtime:1.2.0") }
앱 시작 시 구성요소 초기화
앱과 라이브러리는 구성 요소를 즉시 초기화해야 하는 경우가 많습니다. 앱이 시작됩니다. 콘텐츠 제공업체를 통해 각 종속 항목을 초기화하지만 콘텐츠 제공자는 인스턴스화하는 데 비용이 많이 듭니다. 시작 시퀀스가 불필요하게 느려질 수 있습니다. 또한 Android는 콘텐츠 제공자를 알 수 없는 순서로 초기화합니다. 앱 시작은 앱 시작 시 구성요소를 초기화하고 명시적으로 종속 항목을 정의합니다
앱 시작을 사용하여 시작 시 구성요소를 자동으로 초기화하려면 다음을 실행해야 합니다. 앱이 필요로 하는 각 구성요소의 구성요소 이니셜라이저를 정의합니다. 초기화합니다.
구성요소 이니셜라이저 구현
다음을 구현하는 클래스를 만들어 각 구성요소 이니셜라이저를 정의합니다.
Initializer
인터페이스
이 인터페이스는 두 가지 중요한 메서드를 정의합니다.
create()
메서드: 구성요소를 초기화하고T
인스턴스를 반환합니다.dependencies()
메서드: 나머지 항목의 목록을 반환합니다. 이니셜라이저가 의존하는Initializer
객체입니다. 이 메서드를 사용하여 시작 시 앱이 이니셜라이저를 실행하는 순서를 제어합니다.
예를 들어 앱이
WorkManager
시작할 때 초기화합니다. WorkManagerInitializer
클래스를 정의합니다.
Initializer
를 구현합니다.
Kotlin
// Initializes WorkManager. class WorkManagerInitializer : Initializer{ override fun create(context: Context): WorkManager { val configuration = Configuration.Builder().build() WorkManager.initialize(context, configuration) return WorkManager.getInstance(context) } override fun dependencies(): List >> { // No dependencies on other libraries. return emptyList() } }
자바
// Initializes WorkManager. class WorkManagerInitializer implements Initializer{ @Override public WorkManager create(Context context) { Configuration configuration = Configuration.Builder().build(); WorkManager.initialize(context, configuration); return WorkManager.getInstance(context); } @Override public List >> dependencies() { // No dependencies on other libraries. return emptyList(); } }
dependencies()
메서드는 빈 목록을 반환합니다. WorkManager
가
다른 라이브러리에 종속될 수 있습니다
앱이 ExampleLogger
라는 라이브러리에도 종속되어 있다고 가정해 보겠습니다.
WorkManager
에 따라 달라집니다 이 종속 항목은
앱 시작이 먼저 WorkManager
를 초기화하도록 합니다.
Initializer
를 구현하는 ExampleLoggerInitializer
클래스:
Kotlin
// Initializes ExampleLogger. class ExampleLoggerInitializer : Initializer{ override fun create(context: Context): ExampleLogger { // WorkManager.getInstance() is non-null only after // WorkManager is initialized. return ExampleLogger(WorkManager.getInstance(context)) } override fun dependencies(): List >> { // Defines a dependency on WorkManagerInitializer so it can be // initialized after WorkManager is initialized. return listOf(WorkManagerInitializer::class.java) } }
자바
// Initializes ExampleLogger. class ExampleLoggerInitializer implements Initializer{ @Override public ExampleLogger create(Context context) { // WorkManager.getInstance() is non-null only after // WorkManager is initialized. return ExampleLogger(WorkManager.getInstance(context)); } @Override public List >> dependencies() { // Defines a dependency on WorkManagerInitializer so it can be // initialized after WorkManager is initialized. return Arrays.asList(WorkManagerInitializer.class); } }
dependencies()
메서드에 WorkManagerInitializer
를 포함했으므로
시작은 ExampleLogger
전에 WorkManager
를 초기화합니다.
매니페스트 항목 설정
앱 시작에는 InitializationProvider
라는 특수 콘텐츠 제공자가 포함되어 있습니다.
구성 요소 이니셜라이저를 검색하고 호출하는 데 사용됩니다. 앱 시작
먼저
항목을 확인하여 구성요소 이니셜라이저를 검색합니다.
(InitializationProvider
매니페스트 항목 아래) 그런 다음 App Startup은
dependencies()
메서드를 호출합니다.
즉, 구성요소 이니셜라이저를 앱에서 검색할 수 있으려면 시작하려면 다음 조건 중 하나를 충족해야 합니다.
- 구성요소 이니셜라이저에는
InitializationProvider
매니페스트 항목을 찾습니다. - 구성요소 이니셜라이저는
dependencies()
이니셜라이저가 있는지 확인합니다.
WorkManagerInitializer
가 있는 예시를 다시 생각해 보세요.
ExampleLoggerInitializer
앱 시작에서 이러한 항목을 발견할 수 있도록 하기 위해
초기화하려면 매니페스트 파일에 다음을 추가합니다.
WorkManagerInitializer
의
항목은 추가할 필요가 없습니다.
WorkManagerInitializer
가 ExampleLoggerInitializer
의 종속 항목이기 때문입니다.
즉, ExampleLoggerInitializer
을 검색할 수 있으면 이 항목도 검색 가능합니다.
WorkManagerInitializer
tools:node="merge"
속성을 사용하면 매니페스트 병합
도구가 충돌하는 항목을 올바르게 해결합니다.
린트 검사 실행
앱 시작 라이브러리에는 검사에 사용할 수 있는 일련의 린트 규칙이 포함되어 있습니다.
구성 요소 이니셜라이저를 올바르게 정의했는지 여부 사용자는 이러한
명령줄에서 ./gradlew :app:lintDebug
를 실행하여 이러한 린트 검사를 실행합니다.
수동으로 구성요소 초기화
일반적으로 앱 시작을 사용할 때 InitializationProvider
객체는
엔터티가
다음으로 AppInitializer
애플리케이션 시작 시 구성요소 이니셜라이저를 자동으로 검색하고 실행합니다.
그러나 AppInitializer
를 직접 사용하여 수동으로
앱이 시작할 때 필요하지 않은 구성 요소를 초기화할 수 있습니다. 이를 가리켜
지연 초기화가 가능하며 시작 비용을 최소화하는 데 도움이 될 수 있습니다.
먼저 원하는 구성요소에 대해 자동 초기화를 사용 중지해야 합니다. 수동으로 초기화합니다.
개별 구성요소의 자동 초기화 사용 중지
단일 구성요소에 대해 자동 초기화를 사용 중지하려면 사용 중지하려는
항목을 업데이트해야 합니다.
예를 들어 매니페스트 파일에 다음을 추가하면 자동으로
ExampleLogger
초기화:
단순히 항목을 삭제하는 대신 항목에서 tools:node="remove"
를 사용합니다.
다른 모든 기존 항목에서도 항목을 삭제하도록
병합되었습니다.
모든 구성요소에 자동 초기화 사용 중지
모든 자동 초기화를 사용 중지하려면
InitializationProvider
를 삭제합니다.
구성요소 이니셜라이저 수동 호출
구성요소에 대해 자동 초기화가 사용 중지된 경우 다음을 사용할 수 있습니다.
AppInitializer
: 구성요소와 그 종속 항목을 수동으로 초기화합니다.
예를 들어 다음 코드는 AppInitializer
를 호출하고 수동으로 초기화합니다.
ExampleLogger
:
Kotlin
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer::class.java)
자바
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer.class);
따라서 WorkManager
이 다음과 같기 때문에 앱 시작은 WorkManager
도 초기화합니다.
ExampleLogger
의 종속 항목
의견 보내기
다음 리소스를 통해 의견을 보내고 아이디어를 공유해 주세요.
- Issue Tracker
- 버그를 수정할 수 있도록 문제를 신고해 주세요.
추천 항목
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- 앱 아키텍처: 데이터 영역 - WorkManager로 작업 예약 - Android 개발자
- 앱 아키텍처: 데이터 영역 - DataStore - Android 개발자