WorkManager runs in background thread, while LifecycleOwner/LiveData require main/ui thread, thus it is highly not recommended.
If you really must ...
The sample below utilize CoroutineWorker
class ReminderWorker(appContext: Context, workerParams: WorkerParameters): CoroutineWorker(appContext, workerParams), LifecycleOwner { companion object { fun run() : LiveData<WorkInfo> { val work = OneTimeWorkRequestBuilder<ReminderWorker>().build() WorkManager.getInstance().enqueue(work) return WorkManager.getInstance().getWorkInfoByIdLiveData(work.id) } } private lateinit var lifecycleRegistry: LifecycleRegistry override fun getLifecycle(): Lifecycle { return lifecycleRegistry } override suspend fun doWork(): Result = coroutineScope { val worker = this@ReminderWorker lifecycleRegistry = LifecycleRegistry(worker) lifecycleRegistry.currentState = Lifecycle.State.CREATED val lifecyclerOwner = work // test if Lifecycle.Event.ON_DESTROY is called lifecycle.addObserver(object : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroy() { Timber.d("onDestroy") } }) lifecycleRegistry.currentState = Lifecycle.State.STARTED // do something lifecycleRegistry.currentState = Lifecycle.State.DESTROYED Result.success() }}
References: