Как реализовать JobScheduler на Android Xamarin - PullRequest
0 голосов
/ 23 апреля 2019

Я работаю над проектом 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)
                {


                }

   }

И класс задания:

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



        }

Мне нужно создать фоновый сервис, который будет работать вечно и продолжать вызывать сервер, даже после того, как приложение будет убито.

1 Ответ

0 голосов
/ 26 апреля 2019

Лучше всего использовать WorkManager от Xamarin. Вы можете найти вводный блог для WorkManager здесь

В блоге Xamarin появилась новая статья на эту тему: Начало работы с WorkManager .

Имейте в виду, что если приложение принудительно остановлено, фоновая работа возобновится только после того, как пользователь снова запустит ваше приложение. Но WorkManager будет следить за работой и никогда не потерять ее.

Для получения дополнительной информации вы можете обратиться к документации WorkManager . Помните, что WorkManager (как JobScheduler) имеет минимальный периодический интервал 15 минут и что это не точная задержка, а только минимальный интервал.

...