Android Jetpack의 앱 시작 라이브러리 사용 소개

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);

이상으로 앱 스타트 업 라이브러리 사용 및 기능 소개를 마쳤습니다. 자세한 내용은 앱 스타트 업 라이브러리 공식 홈페이지를 확인 해주세요 읽어 주셔서 감사합니다!

추천

출처blog.csdn.net/weixin_42324979/article/details/110524423