Сделать уведомление, которое будет работать каждый день в 9:00 вечера - PullRequest
1 голос
/ 13 сентября 2011

Я хочу сделать автоматическую синхронизацию в моем приложении, которая будет происходить каждый день в 9:00 вечера. Я делаю это таким образом:

try { Thread.sleep(24hours); } catch (Exception ex) { }

Но проблема в том, когда пользователь выключает свое устройство до 24 часов, при включении его поток снова переходит в спящий режим на 24 часа.

Так что я думаю о способе управления этим в зависимости от часов системы. Когда устройство будет работать в 21:00, приложение будет оповещено, и я выполню всю работу.

Можно ли это сделать?

Ответы [ 6 ]

2 голосов
/ 14 сентября 2011

Вы хотите запланировать запуск приложения в определенное время.ОС BlackBerry поддерживает это.См. Расписание приложения BlackBerry

2 голосов
/ 13 сентября 2011

Я рекомендую использовать один из доступных уже созданных Java-планировщиков с открытым исходным кодом: Список планировщиков заданий с открытым исходным кодом в Java

Тот, с кем я знаком, является первым в этом списке: Кварц

... Похоже, кто-то избил меня до этого. (Ответ выше был добавлен, когда я писал этот)

Но просто для быстрого расширения вы можете легко настроить «задания», которые выполняются в фоновом режиме, отдельно от пользователя. Теперь я лично использовал это с веб-сайтами, а не с устройствами, которые пользователи могут выключать и включать. При этом я уверен, что то, что вы пытаетесь сделать, уже решалось, и вы должны попробовать кварц, он, вероятно, может сделать то, что вам нужно.

Удачи, -Asaf

2 голосов
/ 13 сентября 2011

Вы смотрели на Кварц (http://www.quartz -scheduler.org /)?Может быть, это будет применимо.

0 голосов
/ 13 сентября 2011

Вы можете использовать RealTimeClockListener. Затем вы напишите метод clockUpdated(), который будет вызываться ОС каждую минуту. Там вы можете сделать свой расчет, чтобы определить, настало ли время для выполнения вашего кода.

0 голосов
/ 13 сентября 2011

Проблема может быть решена с помощью простого фонового потока.

  public static void main(String[] args) {
        Thread myJobThread = new Thread(this, "My background job");
        myJobThread.setDaemon(true);
        myJobThread.start();
    }

    // check the time every minute
    private int checkRate = 60000;

        @Override
        public void run() {
            while(true) {
                Date now = new Date();
                if (now > 9a.m.) {
                    // do your stuff
                }
                try {
                    Thread.sleep(checkRate);
                } catch (InterruptedException e){
                    // handle ex
                }
            }
        }
0 голосов
/ 13 сентября 2011

Может быть, вы можете сделать это с Календарь :

    boolean nine=false;

    //until it's nine'o clock
    while(!nine){

      Calendar calendar=Calendar.getInstance();
        if(calendar.get(Calendar.HOUR_OF_DAY)==9&&calendar.get(Calendar.MINUTE)==0&&calendar.get(Calendar.SECOND)==0&&calendar.get(Calendar.MILLISECOND)==0){
            nine=true;
                nine=true;
            }
            else {
                sleep(yourTime);
            }
    }

    //...whatever should happen now...

   //put the boolean back to false;
    nine=false;
...