Jetpack의 앱 시작 라이브러리 사용 소개
앱 시작 라이브러리 소개
앱 시작 라이브러리는 애플리케이션이 시작될 때 구성 요소를 초기화하는 직접적이고 효율적인 방법을 제공합니다. 라이브러리 개발자와 응용 프로그램 개발자 모두 "응용 프로그램 시작"을 사용하여 시작 순서를 단순화하고 초기화 순서를 명시 적으로 설정할 수 있습니다.
앱 시작을 사용하면 초기화해야하는 각 구성 요소에 대해 별도의 콘텐츠 공급자를 정의하지 않고도 단일 콘텐츠 공급자를 공유하는 구성 요소 이니셜 라이저를 정의 할 수 있습니다. 이것은 응용 프로그램의 시작 시간을 크게 단축 할 수 있습니다.
구현 원칙
보시다시피 응용 프로그램의 실행 순서는 다음과 같습니다. 먼저 Application의 attachBaseContext () 메서드를 호출 한 다음 ContentProvider의 onCreate () 메서드를 호출 한 다음 Application의 onCreate () 메서드를 호출합니다.
또한 앱 시작은 내부에 ContentProvider를 만들고 초기화를위한 표준 집합을 제공합니다 . 그런 다음 다른 타사 라이브러리의 경우 더 이상 ContentProvider를 직접 만들 필요가 없으며 앱 시작에서 제공하는 표준에 따라 구현하기 만하면됩니다. 앱 시작을 통해 앱이 시작되기 전에 라이브러리가 성공적으로 초기화되었는지 확인할 수 있습니다.
해결 된 문제
-
타사 라이브러리를 많이 도입 한 후 Application의 코드가 매우 엉망이되는 문제 해결
-
라이브러리 개발자는 자체 라이브러리에서 라이브러리를 초기화하기 위해 ContentProvider를 사용할 필요가 없으므로 응용 프로그램의 시작 시간이 향상됩니다.
-
라이브러리 초기화가 Application의 onCreate () 메소드 전에 초기화 작업을 완료하도록합니다.
.
앱 시작 라이브러리 사용
1. build.gradle 파일에 종속성 추가
dependencies {
implementation "androidx.startup:startup-runtime:1.0.0"
}
2. 앱 시작 라이브러리의 이니셜 라이저 인터페이스 구현
class MyInitializer implements Initializer<Unit> {
@Override
//进行库的初始化操作
public MyInitializer create(Context context) {
//在这里进行第三方库的初始化
XXXX.initialize(context)
}
@Override
//表示当前要初始化的库是否还依赖于其他的Initializer,如果有的话,就在这里进行配置
public List<Class<Initializer<?>>> dependencies() {
// 当前库无第三方库依赖
return emptyList();//返回一个看的集合
}
}
3. 정의 된 Initializer를 AndroidManifest.xml로 구성합니다.
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data android:name="com.myclass.MyInitializer"
android:value="androidx.startup" />
</provider>
참고 : 사용자 지정 이니셜 라이저의 전체 경로 클래스 이름을 지정하는 데 필요한 메타 데이터의 android : name 부분 만 다른 부분은 수정할 수 없습니다. 그렇지 않으면 앱 시작 라이브러리가 제대로 작동하지 않을 수 있습니다.
이 시점에서 앱 시작 라이브러리 사용은 기본적으로 끝났으니 수동 초기화 구성 요소를 소개하겠습니다.
.
타사 라이브러리 수동 초기화 (지연 초기화)
1. 단일 라이브러리의 자동 초기화 비활성화
단일 라이브러리의 자동 초기화를 비활성화하려면 <meta-data>
목록에서 해당 라이브러리의 이니셜 라이저 항목을 삭제합니다.
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data android:name="com.myclass.MyInitializer"
tools:node="remove" />
</provider>
아래와 같이 초기화해야 할 때 수동으로 초기화합니다.
AppInitializer.getInstance(context)
.initializeComponent(MyInitializer.class);
2. 모든 라이브러리의 자동 초기화 비활성화
모든 자동 초기화를 비활성화하려면 InitializationProvider
목록에서 전체 항목을 삭제하십시오.
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
아래와 같이 초기화해야 할 때 수동으로 초기화합니다.
AppInitializer.getInstance(context)
.initializeComponent(MyInitializer.class);
이상으로 앱 스타트 업 라이브러리 사용 및 기능 소개를 마쳤습니다. 자세한 내용은 앱 스타트 업 라이브러리 공식 홈페이지를 확인 해주세요 읽어 주셔서 감사합니다!