AndroidX icon indicating copy to clipboard operation
AndroidX copied to clipboard

WorkManager not working when app is killed

Open Newsid opened this issue 3 years ago • 16 comments

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??

Newsid avatar Jul 05 '21 13:07 Newsid

Hi @Newsid did you find a solution?

AntRemo avatar Aug 01 '21 02:08 AntRemo

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.

Newsid avatar Aug 02 '21 06:08 Newsid

@Newsid

Thanks for the feedback

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

Are you sure? Can you provide minimal repro sample for issue reproduction, please? Thanks

moljac avatar Aug 23 '21 11:08 moljac

@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

djhango avatar Nov 15 '21 05:11 djhango

@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

Daoting avatar Feb 22 '22 08:02 Daoting

@Daoting @djhango Thanks a lot for the feedback. Appreciated.

I will try to sit and dig into the issue and sample (BTW @djhango thanks a lot) ASAP, but my day is 24 hrs which is currently not enough.

moljac avatar Feb 22 '22 09:02 moljac

@moljac This bug still exists.

Version Information: Visual Studio Enterprise 2022 Version 17.3.2 Xamarin.AndroidX.Work.Runtime 2.7.1.4

Daoting avatar Aug 24 '22 07:08 Daoting

This bug still exists

Microsoft Visual Studio Community 2022 Version 17.2.2 Xamarin.AndroidX.Work.Runtime 2.3.4.6

temanado avatar Sep 08 '22 22:09 temanado

This bug still exists

Microsoft Visual Studio Community 2022 Version 17.4.1 Xamarin.AndroidX.Work.Runtime 2.7.1.5

IgorSava avatar Nov 21 '22 20:11 IgorSava

But still exists.

Microsoft Visual Studio Community 2022 Version 17.4.2 Xamarin.AndroidX.Work.Runtime 2.7.1.5

Anyone have any updates or work arounds for this??

kkppstudios avatar Dec 12 '22 03:12 kkppstudios

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

buithienquyet avatar Dec 26 '22 16:12 buithienquyet

Is this bug still relevant? Is someone working on it?

Tviljan avatar Mar 16 '23 12:03 Tviljan

This bug still exists

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

onurcoskun14 avatar May 15 '23 13:05 onurcoskun14

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

Damn that's a shame if true. I'm curious why the worker can't launch the C# function, surely we could set something up where Java is called and then that uses JNI to call into the C# runtime.

Zintom avatar Sep 17 '23 08:09 Zintom

still an issue w/ Xamarin.AndroidX.Work.Runtime v 2.9.0

pkzOR avatar Dec 14 '23 18:12 pkzOR

I am rescinding my previous comment after reading this: https://developer.android.com/topic/performance/background-optimization

The key point here is: "The precise restrictions imposed are determined by the device manufacturer."

All I had to do was go into Settings | App | myApp | Battery and set it to Unrestriced. Then, it started working. Any other battery setting did not work.

Note: Add logging in DoWork(), connect device to PC, allow USB tethering, build, deploy to device, watch the device log (in VS, Tools | Android | Device Log) to see it working. Run app, kill app, change battery restrictions, etc. You do need to wait the minimum time of 15 minutes.

pkzOR avatar Dec 18 '23 17:12 pkzOR