2011-06-24 14 views
2

私は、外部フラグがtrueの間にXミリ秒ごとに関数myFunction()を実行したいだけです。しかし、私はスレッド(アプリクラッシュ)、タイマー(アプリクラッシュ)と運がなかった。ハンドラ/ランナブルは少し優れているが、一般的に、私のようなものがあります:Android - 条件がtrueの間にXミリ秒ごとに関数を実行しますか?

Runnable rr = new Runnable() { 
       public void run() { 
        if (flag1 == true) { 
         myFunction(); 
        } else { 
         return; 
        } 
       } 
      }; 
      handler.postDelayed(rr, 1000); 

をしかし、問題は、実行は1000ミリ秒後に次々と来るです。 myFunctionの実行を1回、1000msを待つ、myFunctionを呼び出す、1000ms待つ、myFunctionを呼び出すなど、flag1がfalseになるまでしたい。

私はしばらくこのことに悩まされていますので、どんな助けでも大歓迎です。

EDIT - より多くの質問情報

次のようにハンドラが定義されています

プライベートハンドラハンドラ=新しいハンドラ();

そのクラスは、外部ハードウェアからの非同期イベントに基づいてフラグの変更をリスンしようとしているBroadcastReceiverです。

+0

は 'MyFunctionを()' UIスレッドへのアクセスを必要としないか、それがバックグラウンド同期(またはそのようなもの)であるのに役立ちます願って、あなたのニーズに合わせなければなりませんか? – Haphazard

+0

@Haphazard - はい、myFunction()には現在トーストが含まれているため、UIアクセスが必要です。 @Zak - ハンドラで質問を更新します。これは単なる基本コンストラクタHandler() – JDS

答えて

4

を見てみたいことがあり、私は昨日thisの質問に答えました。それは

はそれが

+0

ねえ、あなたの投稿にサービスを実装しようとしましたが、それは私の目的のためにうまくいっているようです。束の親のおかげでありがとう。 – JDS

+0

問題ないです。私は助けになることができてうれしいです。私は最初にサービスを受けました。 – Bear

1

これは、アプリケーションの有効期間中毎秒フラグをループしてチェックします。

Thread myThread = new Thread(new UpdateThread());` 
myThread.start();` 

public class UpdateThread implements Runnable { 

    @Override 
    public void run() { 
      while(true) 
    { 
     if (flag1 == true) 
         myFunction(); 
     myThread.sleep(1000); 
    } 

} 

また、あなたがサービス

http://developer.android.com/reference/android/app/Service.html

+0

素晴らしい、これを試してみます。 'thread'はUpdateThreadクラスのプライベートメンバーですか? – JDS

+0

Thread.sleep(1000);あなたが必要なものですか?その中のjava.lang.Thread –

+0

実際には必要なmyThread.sleepのように見えます。 – deepwinter

関連する問題