Подождите 5 секунд

Я хочу подождать 5 секунд, прежде чем запускать другой публичный метод void. Нить сна не работал для меня. Если есть способ wait() без использования потоков, я хотел бы знать это.

public void check(){
    //activity of changing background color of relative layout
}

Я хочу подождать 3 секунды, прежде чем изменить относительный цвет макета.

Ответ 1

просто добавьте один слой с лямбдой

(new Handler()).postDelayed(this::yourMethod, 5000);

Ответ 2

Посмотрите, работает ли это для вас. Обязательно импортируйте android.os.Handler

      Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                public void run() {
                    // yourMethod();
                }
            }, 5000);   //5 seconds

Ответ 3

Вы можете использовать обработчики Java для достижения вашей задачи:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
     // Actions to do after 5 seconds
    }
}, 5000);

для получения дополнительной информации прочитайте следующий URL:

https://developer.android.com/reference/android/os/Handler.html

Ответ 4

Я разместил этот ответ на другой вопрос, но он также может помочь вам.

Учебный класс:

import android.os.Handler;
import android.os.Looper;

public class Waiter {

WaitListener waitListener;
int waitTime = 0;
Handler handler;
int waitStep = 1000;
int maxWaitTime = 5000;
boolean condition = false;

public Waiter(Looper looper, final int waitStep, final int maxWaitTime){

    handler = new Handler(looper);
    this.waitStep = waitStep;
    this.maxWaitTime = maxWaitTime;

}

public void start(){

    handler.post(new Runnable() {
        @Override
        public void run() {

            waitListener.checkCondition();

            if (condition) {

                waitListener.onConditionSuccess();

            } else {
                if (waitTime <= maxWaitTime) {

                    waitTime += waitStep;
                    handler.postDelayed(this, waitStep);

                } else {

                    waitListener.onWaitEnd();
                }
            }
        }
    });

}

public void setConditionState(boolean condition){
    this.condition = condition;
}

public void setWaitListener(WaitListener waitListener){
    this.waitListener = waitListener;
}

}

Интерфейс:

public interface WaitListener {

public void checkCondition();

public void onWaitEnd();

public void onConditionSuccess();

}

Пример использования:

ConnectivityManager mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final int result = mConnMgr.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableMMS");

final Waiter waiter = new Waiter(getMainLooper(), 1000, 5000);
waiter.setWaitListener(new WaitListener() {

            @Override
            public void checkCondition() {
                Log.i("Connection", "Checking connection...");
                NetworkInfo networkInfo = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS);
                waiter.setConditionState(networkInfo.isConnected());
            }

            @Override
            public void onWaitEnd() {
                Log.i("Connection", "No connection for sending");
                //DO
            }

            @Override
            public void onConditionSuccess() {
                Log.i("Connection", "Connection success, sending...");
                //DO
            }

});

waiter.start();

Ответ 5

Для импорта используйте: import android.os.Handler;

 new Handler().postDelayed(new Runnable() {
            public void run() {
                // yourMethod();
            }
        }, 5000);   //5 seconds

Ответ 6

Я использую следующий код (так же, как вы видели раньше) для моего приложения для Android, мне нужно подождать несколько потоков, прежде чем начать мой новый метод. Работает нормально.

 Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                // yourMethod();
            }
        }, 5000);   //5 seconds