我正在尝试设置一个每 15 分钟执行一次任务的 WorkManager。现在我正在做这个测试,在 firebase 数据库中添加一个条目。
我正在使用 nuget 包 Xamarin.AndroidX.Work.Runtime (2.5.0.2)
如果应用程序在前台或后台运行,这可以正常工作,但如果我杀死该应用程序,它就会停止工作。
我正在使用诺基亚 8 Sirocco (api 28) 和三星 Galaxy A21S (api 30) 进行此测试,它们都安装了 Android Stock。
这就是我开始工作的方式:
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);
}
这是我的 Worker 类:
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();
}
}
在 android studio 中用本机代码做同样的测试很有魅力。
我是否遗漏了 Xamarin 方面的某些内容,还是 Xamarin.AndroidX.Work.Runtime 被窃听了? 有什么建议吗?