xamarin Android工作管理器未在正确时间启动

qncylg1j  于 2022-12-07  发布在  Android
关注(0)|答案(1)|浏览(125)

我正在尝试每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");
        }
    });
xam8gpfp

xam8gpfp1#

我已经创建了一个示例来测试您的代码,并且DoWork方法将在我的项目中每15分钟调用一次。
下面是我的班级扩展作品:

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

而MainActivity中的代码:

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将使用多线程来处理周期性任务,因此不需要使用Task.run和async中的DoWork方法。
此外,我在Android 12模拟器上测试了它,你可以尝试在不同的设备上运行你的项目,因为不同的移动的制造商会有不同的电池优化策略.

相关问题