Search code examples
androidwait

Wait a time - Android


I want that my program wait 10s in my while true, but it doesn't work I tried to use Thread.sleep(10000); but it isn't 10s

while (true) {
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 5; j++) {
            if (matrixVacancy[i][j] == 1) {
                completeParking(i, j, R.color.vaga_ocupada);
            } else {
                completeParking(i, j, R.color.cor_chao);
            }
        }
    }
    try {
        Thread.sleep(10000);
    } catch (InterruptedException ex) {
    }

    int a, b, c, d, e, f, g, h, i;

    a = (int) (Math.random() * 2); // indice i
    b = (int) (Math.random() * 5); // indice j
    c = (int) (Math.random() * 2); // tem ou nao carro

    d = (int) (Math.random() * 2); // indice i
    e = (int) (Math.random() * 5); // indice j
    f = (int) (Math.random() * 2); // tem ou nao carro

    g = (int) (Math.random() * 2); // indice i
    h = (int) (Math.random() * 5); // indice j
    i = (int) (Math.random() * 2); // tem ou nao carro

    matrixVacancy[a][b] = c;
    matrixVacancy[d][e] = f;
    matrixVacancy[g][h] = i;
}

How can I do it? For my while wait 10s?


Solution

  • Depends what thread your trying to sleep. You can also put your method in a seperate thread and do your methods there. This way your app will not hang/sleep

    private class TimeoutOperation extends AsyncTask<String, Void, Void>{
    
        @Override
        protected Void doInBackground(String... params) {
    
            try {
                Log.i(TAG, "Going to sleep");
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        @Override
        protected void onPostExecute(Void result) {
            Log.i(TAG, "This is executed after 10 seconds and runs on the main thread");
            //Update your layout here
            super.onPostExecute(result);
        }
    }
    

    To run this operation use

    new TimeoutOperation().execute("");