2009-10-29 4 views
5

特定の時間間隔のスレッドを自動スケジュールするとします。私はまた、デバイスにハングすることなく、バックグラウンドでこれを実行する必要があります。ブラックベリーで特定のスレッドをスケジュールする方法

私はこれをアプリケーションマネージャクラスで試しましたが、アプリケーションスケジューリング用です。アプリケーション内でスレッドをスケジュールする必要があります。

答えて

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)

0

アプリケーションが実行されている間は、スレッドを作成して、作業の各ビットの後にThread.sleepを呼び出して、休眠状態にしておく必要があります。

あなたはそれが、あなたは、次のような何かを行うことができ、単に特定の時間のために寝るのではなく、特定の時間にアップを起こすために必要がある場合:

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

感謝を参照してくださいが、睡眠中にそれが与えられた時間(長いmillisToSleepFor)時間がハングアップします。 – Rishabh

+0

あなたはスレッドがスリープしている間、デバイスは他のスレッドをスケジュールしないと言っていますか? sleep()の全体のポイントは、スレッドがその時間量の間CPU上でスケジュールされていないということです。 –

2

使用UiApplication.getUiApplication().invokeLater() それは遅延を受け入れますパラメータを繰り返し、必要なものを正確に実行します。

EDIT

私はこの記事が古いです知っているが、これは、イベントの繰り返しスケジュールするためにこれまでの最良の選択肢であると私は必要とされ、次のスケジュールされたイベントを停止することを追加したいと思います:

//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); 
+0

右ですが、スレッドが指定された遅延、例えば1の遅延で終了した後にexcuteを開始する方法はありますか?日。 – Rishabh

+0

UiApplication.getUiApplication()。requestBackground();を追加できます。オーバーライドされたonClose()メソッドでは、アプリケーションをバックグラウンドで実行したままにしますが、アプリケーションコンテキストの観点から開始するスレッドは、スケジュールされたスレッドを含む、適切に閉じられた後で終了します。 – Lisandro

1

デバイスの起動時にスレッドを実行するとします。 2番目のプロジェクトを作成し、代替エントリポイントとしてリストします。 UiApplicationまたはApplication main()で、プロジェクトに渡された引数を確認します。あなたの定期的なものをThread.sleep経由で行い、enterEventDispatcherを呼び出さないでください。

「自動」を検索: http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf

それとも、一度ユーザーがそれを「起動する」何かをしたい場合は、あなたのタイミングのものを行うために、新しいスレッドの作成に見えます。画面のonClose()をオーバーライドし、Application.getActivation()。deactivate()を使用して画面をバックグラウンドにスローします。

または、invokeLaterなどのようなことをするための他の方法があります。イベントリスナーが必要な処理を行うかもしれませんが、詳細はあまりありません。

関連する問題