2011-09-13 11 views
1

私のアプリケーションでは、毎日午後9時に自動同期させたいと思っています。私はの方法でこれをやっている:毎日午後9時に通知が行われる

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

しかし、スレッド上で、それを回すと24時間再びスリープしますと、ユーザは、24時間前に彼のデバイスをオフにしたときに問題があります。

私はシステムのクロックに応じてこれを管理する方法を考えています。デバイスが午後9時の時刻になると、アプリケーションに警告が表示され、作業を行います。

これは可能ですか?

+1

OSスケジューラを使用することができます。 OSは何ですか? – mre

+0

Blackberry 5.0,6.0,7.0。 OSスケジューラはどういう意味ですか?例えば、 –

+0

。 [Windowsタスクスケジューラ](http://en.wikipedia.org/wiki/Windows_Task_Scheduler) – mre

答えて

2

あなたのアプリが特定の時間に実行されるようにスケジュールしたいと思っています。 BlackBerryのOSはこれをサポートしている。 Schedule a BlackBerry application

2

Quartz(http://www.quartz-scheduler.org/)を見ましたか?多分それは適用されるでしょう。

+0

これは、モバイルデバイスの過度のようです。また、そこにはjava-me版がありますか? –

-1

たぶん、あなたはCalendarでそれを行うことができます。

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

そうです。しかし、あなたのコードでは、それを行う正しい方法ではない真の節を作成します。 –

+0

私はしばらく偽の節を作る...しかし、なぜそれは正しい方法ではないのですか? – Neifen

+0

私はしばらく真の句を作ってはいけません。私は、Thread.sleepとwhile true節を使用しない別の方法を考えています。私は前にあなたが書いたアルゴリズムでこれを行いましたが、より良いものを作り出そうとしています –

2

を私はすでに作っ利用できる、オープンソースのJavaスケジューラのいずれかを使用してお勧めします。私は精通していList of Open Source Job Schedulers in Java

1は初ですそのリスト:Quartz

...誰かが私にそれを打つように見えます。 (上記の答えは、私がこの記事を書いている間に追加されたものです)

しかし、本当にすばやく拡張するだけで、ユーザーとは別のバックグラウンドで実行される「ジョブ」を簡単に設定できます。今私は個人的にこれをWebサイトで使用していますが、ユーザーが電源を切ったり切ったりできるデバイスではありません。あなたがしようとしていることが前に取り組まれていると確信していると言われています。クォーツを試してみてください。

幸運は、 -Asaf

+0

ご意見ありがとうございます。しかし、彼のバックエンドのQuartzはthread.sleepを使用しているとは思わない?彼は確かです...もしそうなら、これは私が推測する助けにはなりません。私はこれを試して何が起こるかを知りません –

+0

クオーツのジョブがすでに存在し、実行中であるかどうかを尋ねるifステートメントを利用するのはなぜですか?もしそうなら、ジョブを再起動しないでください。 – Asaf

+0

これはモバイルデバイスの過度の使用のようです。また、java-me版のクォーツはありますか? –

0

問題は、単純なバックグラウンドスレッドを実行することによって解決される可能性があります。

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 
       } 
      } 
     } 
+1

私はバックグラウンドスレッドを使いたくない。私はそれを行うためのより良い方法を探しています –

+0

あなたのスレッドでループを忘れていませんでしたか?それとも、 'setDaemon(true);'がそれを担当しているのでしょうか? – Neifen

+0

はい、石英などのものを使用できます。問題はあなたがそれを必要とするかどうかです。実際、石英はバックグラウンドスレッドも使用します。アプリケーションを小さくする必要がなく、複雑なジョブ管理が必要ない場合、バックグラウンドスレッドが私の考え方です。 –

0

あなたはRealTimeClockListenerの使用を検討できます。その後、毎分OSによって呼び出されるメソッドclockUpdated()を作成します。ここで計算を実行して、コードを実行するタイミングかどうかを判断できます。

関連する問題