我正在尝试每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);
还有我的工作
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");
}
});
1条答案
按热度按时间xam8gpfp1#
我已经创建了一个示例来测试您的代码,并且
DoWork
方法将在我的项目中每15分钟调用一次。下面是我的班级扩展作品:
而MainActivity中的代码:
另外,worker将使用多线程来处理周期性任务,因此不需要使用Task.run和async中的
DoWork
方法。此外,我在Android 12模拟器上测试了它,你可以尝试在不同的设备上运行你的项目,因为不同的移动的制造商会有不同的电池优化策略.