如何在Blackberry中安排特定线程

时间:2009-10-29 12:21:06

标签: java multithreading blackberry java-me

我想自动安排具有特定时间间隔的线程。我还需要在后台连续执行此操作而不会挂起设备。

我已经尝试过使用Application Manager Class,但它是用于应用程序调度的,我需要在应用程序中安排线程。

4 个答案:

答案 0 :(得分:6)

我会使用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 (Part Two)

答案 1 :(得分:2)

使用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);

答案 2 :(得分:1)

假设您希望它在设备启动时运行一个线程: 创建第二个项目并将其列为备用入口点。 在UiApplication或Application main()中,检查传递给项目的参数。通过Thread.sleep在那里做周期性的东西,不要调用enterEventDispatcher。

搜索“自动启动”: http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf

或者,如果您想在用户“启动”它时做某事,那么请考虑创建一个新线程来执行您的计时工作。覆盖屏幕的onClose()并使用Application.getActivation()。deactivate()将屏幕投射到背景中。

或者还有其他方法可以像invokeLater那样做这样的事情。也许eventlisteners可能会做你需要的,但你没有提供很多细节。

答案 3 :(得分:0)

只要应用程序正在运行 - 只需创建线程,并在每次工作后调用Thread.sleep,只要您需要它保持休眠状态。

如果您需要在特定时间唤醒 up ,而不是只是在特定时间内睡觉,那么您可以执行以下操作:

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