特定の時間間隔のスレッドを自動スケジュールするとします。私はまた、デバイスにハングすることなく、バックグラウンドでこれを実行する必要があります。ブラックベリーで特定のスレッドをスケジュールする方法
私はこれをアプリケーションマネージャクラスで試しましたが、アプリケーションスケジューリング用です。アプリケーション内でスレッドをスケジュールする必要があります。
特定の時間間隔のスレッドを自動スケジュールするとします。私はまた、デバイスにハングすることなく、バックグラウンドでこれを実行する必要があります。ブラックベリーで特定のスレッドをスケジュールする方法
私はこれをアプリケーションマネージャクラスで試しましたが、アプリケーションスケジューリング用です。アプリケーション内でスレッドをスケジュールする必要があります。
私は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
}
};
}
アプリケーションが実行されている間は、スレッドを作成して、作業の各ビットの後にThread.sleepを呼び出して、休眠状態にしておく必要があります。
あなたはそれが、あなたは、次のような何かを行うことができ、単に特定の時間のために寝るのではなく、特定の時間にアップを起こすために必要がある場合:
Date wakeUpAt = ...; // Get this however
Date now = new Date();
long millisToSleepFor = wakeUpAt.getTime() - now.getTime();
Thread.sleep(millisToSleepFor);
使用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);
デバイスの起動時にスレッドを実行するとします。 2番目のプロジェクトを作成し、代替エントリポイントとしてリストします。 UiApplicationまたはApplication main()で、プロジェクトに渡された引数を確認します。あなたの定期的なものをThread.sleep経由で行い、enterEventDispatcherを呼び出さないでください。
「自動」を検索: http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf
それとも、一度ユーザーがそれを「起動する」何かをしたい場合は、あなたのタイミングのものを行うために、新しいスレッドの作成に見えます。画面のonClose()をオーバーライドし、Application.getActivation()。deactivate()を使用して画面をバックグラウンドにスローします。
または、invokeLaterなどのようなことをするための他の方法があります。イベントリスナーが必要な処理を行うかもしれませんが、詳細はあまりありません。
感謝を参照してくださいが、睡眠中にそれが与えられた時間(長いmillisToSleepFor)時間がハングアップします。 – Rishabh
あなたはスレッドがスリープしている間、デバイスは他のスレッドをスケジュールしないと言っていますか? sleep()の全体のポイントは、スレッドがその時間量の間CPU上でスケジュールされていないということです。 –