Android WorkManager未在正确时间启动



我尝试每15分钟执行一次后台任务。我正在记录doWork方法,这样我就可以查看它的启动是否正确。然而,它按照自己的时间表开火。昨天它只开了一枪。我有什么东西不见了吗?我正在使用Xamarin(c#synax(。

主活动下:

PeriodicWorkRequest AdhanScheduleSvc = PeriodicWorkRequest.Builder.From<AdhanScheduleWorker>(TimeSpan.FromMinutes(15)).Build();
//WorkManager.Instance.Enqueue(AdhanScheduleSvc);
WorkManager.GetInstance(Xamarin.Essentials.Platform.AppContext).Enqueue(AdhanScheduleSvc);

我的DoWork

public override Result DoWork()
{
Android.Util.Log.Debug("AdhanWorker", "Worker Started");
Task.Run(async () =>
{
await CreateSchedules();
}).ContinueWith(t =>
{
if (t.IsFaulted)
{  // Catch Error
Android.Util.Log.Debug("AdhanWorker", $"I Completed With Error {t.Exception}");
};
if (t.IsCompleted)
{  //optionally do some work);
Android.Util.Log.Debug("AdhanWorker", "Worker Completed Success");
}
});

我创建了一个样本来测试您的代码,DoWork方法将在我的项目中每15分钟调用一次。

这是我的课堂扩展作业:

public class MyWorker : Worker
{
public MyWorker(Context context, WorkerParameters workerParameters) : base(context, workerParameters) { }
public override Result DoWork()
{
Console.WriteLine("======================================");
return Result.InvokeSuccess();
}
}

主活动中的代码:

protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
var test = PeriodicWorkRequest.Builder.From<MyWorker>(TimeSpan.FromMinutes(15)).Build();
WorkManager.GetInstance(this.ApplicationContext).Enqueue(test);
}

此外,worker将使用多线程来处理周期性任务,因此不需要在DoWork方法中使用task.Run和async。

此外,我在Android 12模拟器上测试了它,你可以尝试在不同的设备中运行你的项目,因为不同的手机制造商会有不同的电池优化政策。

最新更新