Skip to content

DataDog UploadWorker conflicting with Application custom WorkerFactory #2508

Description

@wbunn1

Question

Do you have recommendation for best way to resolve this?

Issue observations/summary:

  • Datadog SDK is listening to lifecycle methods
  • When the app starts up (whether in foreground or background), our app also initializes the WorkManager and its configuration in the onCreate of our Application.
  • Since we have a custom WorkerFactory (SingletonWorkerFactory) that gets initialized at the same time, it takes precedent (somehow) over the config of the DD WorkerFactory
  • Thus, our WorkerFactory is used to initialize the DD UploadWorker, which it can't because its internal.
  • initialization order in Application onCreate does not matter, same result.

How we initialize WorkManager in application:
@Inject lateinit var workManagerConfiguration: androidx.work.Configuration WorkManager.initialize(this, workManagerConfiguration) DatadogInitializer.initialize(this)

currently using:

  • datadog plugin version '1.14.0'
  • datadog version '2.17.0'

here is our code for datadog initialization:

`
import com.datadog.android.core.configuration.Configuration as DatadogConfig

object DatadogInitializer {
val logger = Logger.Builder()
.setNetworkInfoEnabled(true)
.setService("com..android")
.setLogcatLogsEnabled(true)
.setRemoteSampleRate(100f)
.setName("Mobile Android")
.build()

fun initialize(context: Context) {
    val ddToken = context.getString(R.string.datadog_client_token)

    val datadogEnv = AppController.getInstance().environmentSettingsProvider.dataDogEnvironmentName(
        AppController.getInstance().environmentSettingsProvider.serverRegion
    )

    val config = DatadogConfig.Builder(
        clientToken = ddToken,
        env = datadogEnv,
    ).build()
    Datadog.initialize(context, config, TrackingConsent.GRANTED)

    val applicationId = context.getString(R.string.datadog_application_id)
    val rumConfiguration = RumConfiguration.Builder(applicationId)
        .trackUserInteractions()
        .build()
    Rum.enable(rumConfiguration)

    logger.i("Datadog initialized: $datadogEnv")
}

// used prior to changing environments re-initialization does not work for updating environment
fun stopDatadog() {
    Datadog.stopInstance()
    
    logger.i("Datadog instance stopped")
}

}
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions