Как я могу запланировать конкретную тему в Blackberry - PullRequest
5 голосов
/ 29 октября 2009

Я хочу автоматически планировать поток с определенным интервалом времени. Мне также нужно постоянно выполнять это в фоновом режиме без зависаний на устройстве.

Я пробовал это с классом Application Manager, но это для планирования приложения, и мне нужно запланировать поток внутри приложения.

Ответы [ 4 ]

6 голосов
/ 29 октября 2009

Я бы использовал TimerTask :

public class MyScreen extends MainScreen {
    private Timer mTimer;
    public MyScreen() {        
        mTimer = new Timer();
        //start after 1 second, repeat every 5 second
        mTimer.schedule(mTimerTask, 0, 5000);
    }

    TimerTask mTimerTask = new TimerTask() {
        public void run() {
            // some processing here
        }
    };
}

см. BlackBerry API Hidden Gems (часть вторая)

2 голосов
/ 29 октября 2009

использование UiApplication.getUiApplication().invokeLater() он принимает задержку и повторяет параметры и будет выполнять именно то, что вам нужно.

РЕДАКТИРОВАТЬ

Я знаю, что этот пост старый, но это лучший вариант для планирования повторяющихся событий, и я хотел бы добавить, что для остановки запланированного события требуется следующее:

//Start repeating "runnable" thread every 10 seconds and save the event ID
int eventId = UiApplication.getUiApplication().invokeLater(runnable, 10000, true);

//Cancel the repetition by the saved ID
UiApplication.getUiApplication().cancelInvokeLater(eventId);
1 голос
/ 29 октября 2009

Предполагая, что вы хотите запустить поток при запуске устройства: Создайте второй проект и перечислите его как альтернативную точку входа. В вашем UiApplication или Application main () проверьте аргумент, переданный проекту. Делайте ваши периодические вещи там через Thread.sleep и не вызывайте enterEventDispatcher.

поиск по автозапуску: http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf

Или, если вы хотите сделать что-то, как только пользователь «запустит» это, тогда посмотрите на создание нового потока, чтобы делать ваши вещи времени. Переопределите onClose () вашего экрана и используйте Application.getActivation (). Deactivate (), чтобы перекинуть экран на задний план.

Или есть другие способы сделать что-то подобное, например invokeLater и т. Д. Может быть, EventListeners может делать то, что вам нужно, но вы не дали много деталей.

0 голосов
/ 29 октября 2009

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

Если вам нужно, чтобы он проснулся до в определенное время, а не просто спал в течение определенного времени, тогда вы можете сделать что-то вроде следующего:

Date wakeUpAt = ...; // Get this however
Date now = new Date();
long millisToSleepFor = wakeUpAt.getTime() - now.getTime();
Thread.sleep(millisToSleepFor);
...