如何在Xamarin Android上实现JobScheduler

问题描述 投票:0回答:1

我正在研究Xamarin Forms项目。我想在android项目中创建后台服务。有些朋友建议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);
            }
        }

在MainActivity中:

    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;
            }



        }

我需要创建一个永远工作的后台服务,并继续调用服务器,即使应用程序被杀死后也是如此。

c# xamarin xamarin.android android-jobscheduler android-workmanager
1个回答
0
投票

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

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

请注意,如果您的应用程序被强制停止,则只有在用户再次启动您的应用后,您的后台工作才会恢复。但是,WorkManager将跟踪工作并且永远不会松动任何工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.