안드로이드 스튜디오

[안드로이드 스튜디오 코틀린] Application 초기화 하는 방법 with Jetpack

권송미 2024. 1. 11. 16:30
728x90
반응형

 

 

 

 

 

 

 

 

보통 Application에서 instance를 생성해서 onCreate에 초기화하는 방법을 많이 사용한다.

 

 

이제 Jetpack을 사용해서 초기화를 해보자 !

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

기존 방법은 보통 아래처럼 구현해 준다. 

 

 

 

import android.app.Application

// Singleton으로 구현 ->  Application을 전역적으로 사용해서 어디에서나 접근할 수 있게 함
class ExamApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        instance = this
    }

    // companion object 를 사용하여 싱글톤 패턴을 구현하고 있음 ->
    // 단일 인스턴스(인스턴스 없이)를 전역적으로 접근할 수 있게 함
    // 어떤 클래스 내부에 접근하고 싶어 클래스 내부에 객체를 선언할 때 사용함
    companion object {
        private lateinit var instance: ExamApplication

        fun getInstance() = instance
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이제 Jetpack을 사용해서 초기화를 할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Jetpack은 아래처럼 4가지로 구성되어 있는데 위에서 사용할 WorkManager는 Architecture에 속해있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WorkManager를 사용해서 초기화를 해줄 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

workmanager를 사용하기 위한 implementation을 추가해 준다.

 

// Kotlin + coroutines
implementation 'androidx.work:work-runtime-ktx:2.9.0'

 

(나머지 implemantation은 https://developer.android.com/topic/libraries/architecture/workmanager/basics?hl=ko 참고)

 

- 2.9.0 이후로는 변수로 override 된다. (이전 버전들은 함수가 override 됨)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AndroidManifest에서는 이렇게 추가해 주고,

 

(provider에 관한 사이트 : https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration?hl=ko)

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <!-- If you are using androidx.startup to initialize other components -->
    <meta-data
        android:name="androidx.work.WorkManagerInitializer"
        android:value="androidx.startup"
        tools:node="remove" />
</provider>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이렇게 Application에 추가하면 된다!

 

 

class ExamApplication : Application(), Configuration.Provider {
    override val workManagerConfiguration: Configuration = Configuration.Builder()
        .setMinimumLoggingLevel(android.util.Log.DEBUG)
        .build()
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Jetpack 구글 예제 sunflower(https://github.com/android/sunflower)에도 보면 

 

 

 

 

 

 

 

 

 

 

 

 

이렇게 Application에서 초기화해준 것을 볼 수 있다.  (함수와 변수의 차이는 androidx.work의 버전 차이 때문에)

@HiltAndroidApp
class MainApplication : Application(), Configuration.Provider {
    override fun getWorkManagerConfiguration(): Configuration =
                Configuration.Builder()
                        .setMinimumLoggingLevel(if (BuildConfig.DEBUG) android.util.Log.DEBUG else android.util.Log.ERROR)
                        .build()
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고

 

https://developer.android.com/topic/libraries/architecture/workmanager?hl=ko

 

앱 아키텍처: 데이터 영역 - WorkManager로 작업 예약 - Android 개발자  |  Android Developers

데이터 영역 라이브러리에 관한 이 앱 아키텍처 가이드를 통해 지속적인 작업 유형과 기능 등을 알아보세요.

developer.android.com

 

728x90
반응형