c# - 如何在 Xamarin Android 中实现 JobScheduler

标签 c# xamarin xamarin.android android-jobscheduler android-workmanager

我正在处理 Xamarin Forms 项目。我想在android项目中创建一个后台服务。一位 friend 建议使用 JobDispatcher

我发现标记为未列出的 Xamarin NuGet 包 https://www.nuget.org/packages/Xamarin.Firebase.JobDispatcher . 当我使用 Android.App.Job.JobService 时,它运行完美,但仅适用于本地进程。如果进程有任何调用服务器的代码,服务将停止。

public static class NotificationsJobInfo
{
    public static JobInfo.Builder CreateJobBuilderUsingJobId<T>(this Context context, int jobId) where T : JobService
    {
        var javaClass = Java.Lang.Class.FromType(typeof(T));
        var componentName = new ComponentName(context, javaClass);
        return new JobInfo.Builder(jobId, componentName);
    }
}

在主事件中:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    // Set our view from the "main" layout resource
    SetContentView(Resource.Layout.Main);
    StartNotificationsJob();
}

private void StartNotificationsJob()
{
    try
    {
        Intent intent = new Intent(this, typeof(MainActivity));
        var jobBuilder = this.CreateJobBuilderUsingJobId<MainJob>(1);
        JobInfo jobInfo = jobBuilder
                .SetOverrideDeadline(15*60*1000)
                //.SetRequiredNetworkType(NetworkType.Any)
                //.SetMinimumLatency(15 * 60 * 1000)
                //.SetPeriodic(15 * 60 * 1000)//,1000)
                .Build();

        JobScheduler jobScheduler = (JobScheduler)GetSystemService(JobSchedulerService);
        var result = jobScheduler.Schedule(jobInfo);
    }
    catch (Exception ex)
    {
    }
}

Job 类:

[Service(Name = "XXXXXXXXXXXXXX.MainJob", Permission = "android.permission.BIND_JOB_SERVICE")]
public class MainJob : JobService
{
    public override bool OnStartJob(JobParameters @params)
    {
        Task.Run(() =>
        {
           //Do Some Process

        });
        return true;
    }

    public override bool OnStopJob(JobParameters @params)
    {
        return false;
    }
}

我需要制作一个后台服务,即使在应用程序被终止后,它也能永远工作并继续调用服务器。

最佳答案

你最好的选择是使用 WorkManager来自 Xamarin。你可以找到一个 introductory blog to WorkManager here

Xamarin 的博客上有一篇关于此主题的新文章: Getting Started With WorkManager .

请记住,如果您的应用被强制停止,只有在用户再次启动您的应用后,您的后台工作才会恢复。但是 WorkManager 会跟踪工作并且永远不会丢失任何工作。

可以引用WorkManager's documentation for additional information .请记住,WorkManager(作为 JobScheduler)的最小周期间隔为 15 分钟,这不是精确的延迟,而只是最小间隔。

关于c# - 如何在 Xamarin Android 中实现 JobScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814384/

相关文章:

ios - Xamarin.forms,删除 iOS 10 中的状态栏

listview - 如何获取 Xamarin UITests 中 ListView 项目的计数

c# - 根据用户在 ASP.net 中的设置发送定期邮件?

c# - 编辑简单成员(member)系统创建的默认表

c# - 如何防止 Selenium C# 中 PageFactory 中的 StaleElementReferenceException?

Xamarin 在 Navigatig Back 后 OnAppearing 中的 NavigationStack 计数错误

c# - 我正在尝试使单声道 android 简单 "hello world"但我在模拟器中看不到 "hello world"为什么?

android - Xamarin.Android AndroidEnvironment 文件未应用于更改 GC Bridge 实现

android - Xamarin Forms Android Activity 包为空

c# - InflaterInputStream.Read 导致错误