Повторное выполнение задачи с помощью ScheduledExecutorService, которая может обновлять пользовательский интерфейс

#android #scheduled-tasks

#Android #запланированные задачи

Вопрос:

Я пытаюсь выполнять задачу каждые 2 минуты в своем приложении, и после того, как я прочитал о некоторых способах достижения этого, я решил использовать ScheduledExecutorService, но я могу сделать это для обновления пользовательского интерфейса. Что я делаю не так?

Вот код:

 public class ScheduledTask {

private final String TAG="ScheduledTask";
private final ScheduledExecutorService scheduler =
         Executors.newScheduledThreadPool(1);
private Context context;
private Activity activity;

public ScheduledTask(Context c, Activity a)
{

    this.context=c;
    this.activity=a;
}

 public void RefreshMapPeriodically() 
 {

     final ScheduledFuture refreshHandle =
       scheduler.scheduleAtFixedRate(new Runnable() 
     {
           public void run() 
          { 

               //iau din baza de date sqlLite locala semnele apropiate de locatia mea
               NotificationAdministration notify=new NotificationAdministration(context);
               final ArrayList<SpeedRestriction> lista=notify.getNotificationFromLocalArea(MainActivity.CURRENT_LOCATION.getLatitude(), MainActivity.CURRENT_LOCATION.getLongitude());
               Log.i(TAG,"Run! Preluare din db");



               if(activity !=null)
               {
                   // If you need update UI, simply do this:
                   ((Activity)context).runOnUiThread(new Runnable() {
                       public void run() 
                       {
                           //le adaug pe harta
                            UpdateLocalMap.setSpeedMarkers(lista,MainActivity.getGoogleMap() , MainActivity.getMarkere());
                       }
                   });
               }
          }
     }, 0, 1, MINUTES);

     scheduler.schedule(new Runnable() {
       public void run() 
       { 
           refreshHandle.cancel(true); 
       }
     }, 60 * 60 * 2, SECONDS);
   }
  

И я вызываю это из MainActivity

 ScheduledTask doRefresh=new ScheduledTask(context,this);
             doRefresh.RefreshMapPeriodically();
  

Комментарии:

1. Какой интервал вы предполагаете, что это будет: 60 * 60 * 2, СЕКУНДЫ

2. Остановка задачи через 2 часа.