AndroidX: WorkManager not working when app is killed

Version Information

  • Visual Studio version: 8.10.4 (build 11)
  • Xamarin.Android version: 11.3.0.4 (Visual Studio Community)
  • Using AndroidX or Support Libraries: Xamarin.AndroidX.Work.Runtime (2.5.0.2)

Describe your Issue:

Im trying to setup a WorkManager that executes a task every 15 minutes. For now I’m doing this test adding an entry in a firebase database.

I’m using the nuget package Xamarin.AndroidX.Work.Runtime (2.5.0.2)

This works fine if the app is in foreground or background, but if I kill the app it stops working.

I’m doing this test with a Nokia 8 Sirocco (api 28) and with a Samsung Galaxy A21S (api 30) that both mount Android Stock.

This is how I launch the work:

private void StartParallelWorkManager(int minutes)
     {
         PeriodicWorkRequest taskLauncher = PeriodicWorkRequest.Builder.From<UniquePeriodicWorker>(TimeSpan.FromMinutes(minutes)).Build();
         WorkManager.GetInstance(Xamarin.Essentials.Platform.AppContext).EnqueueUniquePeriodicWork("TestTask", ExistingPeriodicWorkPolicy.Keep, taskLauncher);
     }

and this is my Worker class:

public class UniquePeriodicWorker : Worker
     {
         public UniquePeriodicWorker(Context context, WorkerParameters workerParameters) : base(context, workerParameters)
         {
         }
    
         public override Result DoWork()
         {
                
             System.Console.WriteLine("{0} DO WORK", DateTime.Now.ToString("dd/MM HH:mm:ss"));
             try
             {
                 _ = CrossCloudFirestore.Current
                              .Instance
                              .Collection("WorkManagerRuns")
                              .AddAsync<DateTime>(DateTime.Now);
             }
             catch(Exception ex)
             {
                 System.Diagnostics.Debug.WriteLine(ex);
             }
             return Result.InvokeSuccess();
         }
     }

Doing the same test in android studio (using Kotlin) works like a charm.

Am I missing something in Xamarin side or Xamarin.AndroidX.Work.Runtime is not capable to achieve the same behavior of the native equivalent??

About this issue

  • Original URL
  • State: open
  • Created 3 years ago
  • Reactions: 4
  • Comments: 16 (2 by maintainers)

Most upvoted comments

Hi @AntRemo, not yet. I think it is a problem with this library that is not able to achieve the same behavior of the native equivalent.

Any updates now? It seem to be hard to change because workers call C# code instead of native java code. I think we must to write worker in all java code => create jar => inject back to MAUI

This bug still exists

Microsoft Visual Studio Community 2022 Version 17.4.4 Xamarin.AndroidX.Work.Runtime 2.8.1.1

@moljac

I’m encountering this issue as well.

Version Information:

  • Visual Studio Enterprise 2022 Version 17.2.0 preview1

  • Xamarin.AndroidX.Work.Runtime 2.7.1.2

@moljac

I’m encountering this issue as well, see below for attached sample for reproduction: WorkManager.zip

Version Information:

  • Visual Studio Enterprise 2022 Version 17.0.0
  • Xamarin.AndroidX.Work.Runtime 2.7.0

Comparatively, here’s a sample Android native implementation of the above repro: WorkManagerAndroid.zip

Version Information:

  • Android Studio 2020 3.0.0
  • AndroidX.Work 2.5.0