Метод Timertask Run () не работает в течение более длительного периода, например 2 часа - PullRequest
0 голосов
/ 31 января 2020

создал собственное приложение, которое запускается автоматически, хотя оно удаляется или закрывается пользователем с помощью метода запуска класса Timertask, но оно работает нормально с задержкой до 15 минут и 20 минут, но действие запуска не работает после задержки в 2 часа. Вот мои коды

timerTask = new LoginTimerTask(this);
timer.Schedule(timerTask,(long) TimeSpan.FromHours(2).TotalMilliseconds , (long)TimeSpan.FromHours(2).TotalMilliseconds);

 public class LoginTimerTask : TimerTask
    {
        MainActivity mainActivity;

        public LoginTimerTask(MainActivity activity)
        {
            mainActivity = activity;
        }

        public override void Run()
        {
            var intent = new Intent(mainActivity, typeof(MainActivity));
            mainActivity.StartActivity(intent);
        }
    } 

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Исправлена ​​эта проблема с помощью Alarm Manager.

 public void startAlert()
        {
            var alarmIntent = new Intent(this, typeof(AlarmReceiver));
            var pending = PendingIntent.GetBroadcast(this, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
            var alarmManager = GetSystemService(AlarmService).JavaCast<AlarmManager>();
            alarmManager.Set(AlarmType.ElapsedRealtime,(long)(SystemClock.ElapsedRealtime() + TimeSpan.FromHours(2).TotalMilliseconds), pending);
        }

    [BroadcastReceiver]
    public class AlarmReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            intent = new Intent(context, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.NewTask);
            context.StartActivity(intent);
        }
    }
0 голосов
/ 02 февраля 2020

Сначала добавьте это разрешение

<uses-permission android:name="android.permission.WAKE_LOCK" />

обновление: также вы должны использовать сервис для запуска в фоновом режиме, используйте приведенный ниже код

using System;
using System;
using System.Threading;
using Android.App;
using Android.Content;
using Android.OS;
using OomaAndroid.Models;
using SQLite;

namespace OomaAndroid
{
    [Service]
    public class ServiceTest : Service
    {
        Timer timer;        
        public override void OnCreate()
        {
            base.OnCreate();
        }
        public override IBinder OnBind(Intent intent)
        {            
            return null;
        }


        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {            
            timer = new Timer(HandleTimerCallback, 0, 0, 43200000);
            return base.OnStartCommand(intent, flags, startId);
        }

        private void HandleTimerCallback(object state)
        {
            //Start your Activity Here, it runs every 2 hours
            var intent = new Intent(mainActivity, typeof(MainActivity));
            mainActivity.StartActivity(intent);
        }
    }    
}

, также вы запускаете свой сервис один раз в основной деятельности

  Intent intSer = new Intent(base.ApplicationContext, typeof(ServiceTest));
  StartService(intSer);
...