2

私のサイド プロジェクトでは、Java を使用して Android アプリを開発しています。私はJavaをあまり知りませんが、試しています^^.

プロジェクトは、特定の範囲でランダムな時間にアラームを発生させることです。問題は、クロノメーターとボタンがフリーズすることですが、それでもすべてが機能します! 誰かがthread.sleepの別の解決策を持っていますか??

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);




    }
    public void StartChrono(View view) {
         final Chronometer chrono = (Chronometer)findViewById(R.id.chronometer1);
         chrono.setBase(SystemClock.elapsedRealtime());
         chrono.start();
         //Tick();
     }
     public int RandomTime(int min, int max)
     {
         int random = max - min;
         Random rand= new Random();
         random = rand.nextInt(random)+min;
         return random;
     }
     public boolean CheckUp(int randomtime,int chronotime)
     {
        boolean check = false;

        if(randomtime== chronotime)
         {
             check = true;
         }

        return check;
     }
     public void Tick()
     {
        boolean check = false;
        int randomtime = RandomTime(20,150);
        int time=1;

        do
         {  
            check = CheckUp(randomtime,time);
            time = time +1;
            try {
                Thread.sleep(1000);
                } 
            catch (InterruptedException e) {
                AlertDialog alertDialog;
                alertDialog = new AlertDialog.Builder(this).create();
                alertDialog.setTitle("Error - 000");
                alertDialog.setMessage("Could not check!");
                alertDialog.show();
            }

         }while(check == false);

        if(check == true)
        {
            AlertDialog alertDialog;
            alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Yuy");
            alertDialog.setMessage("Switch!");
            alertDialog.show();
        }
     }
  }
4

2 に答える 2

1

私は間違いなくこのタスクにハンドラーを使用します: http://developer.android.com/reference/android/os/Handler.html

基本的な例は次のとおりです。

long timeDelay = 1000; // Set this to your random number.
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
     // Do whatever you need to do after a specified interval.  
    }
}, timeDelay);

onCreate 内で Handler をインスタンス化し、参照を保持して、メソッド内で呼び出すことができるようにします。

明確にするために、特定の時間「スリープ」するために Thread.sleep() を使用できない理由は次のとおりです。 Thread.sleep() を呼び出すときは、UI スレッドで呼び出すため、すべてのコンポーネントがUI スレッド (ボタン、テキストフィールドなど) は一定時間「スリープ」するため、基本的にアプリケーション全体を停止します。

Thread.sleep のドキュメントも参照してください。

このメッセージを送信したスレッドを、指定された時間 (ミリ秒単位) だけスリープさせます。

于 2013-01-01T17:39:21.960 に答える
1

Thread.sleep() は使用せず、Timer を使用します。

時間を設定すると、タイマーが関連するタスクを自動的に呼び出します。

Android では、次のように動作します。

http://android.okhelp.cz/timer-simple-timertask-java-android-example/

私自身も一度使用しましたが、それはかなり前のことです。

ところで:

ブール値をチェックするメソッドを記述する必要はありません。

これも機能します:

boolean  check = 5>3;
System.out.println("check: " + check);//"check true"
于 2013-01-01T17:17:37.073 に答える