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