Wait for 5 seconds

前端 未结 8 1876
借酒劲吻你
借酒劲吻你 2021-02-01 04:00

I want to wait 5 seconds before starting another public void method. The thread sleep was not working for me. If there is a way of wait() without using Threads I wo

相关标签:
8条回答
  • 2021-02-01 04:49

    I posted this answer to another question, but it may also help you.

    Class:

    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;
    }
    
    }
    

    Interface:

    public interface WaitListener {
    
    public void checkCondition();
    
    public void onWaitEnd();
    
    public void onConditionSuccess();
    
    }
    

    Usage example:

    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();
    
    0 讨论(0)
  • 2021-02-01 04:53

    This works for me:

        val handler = Handler()
        handler.postDelayed({
            // your code to run after 2 second
        }, 2000)
    
    0 讨论(0)
提交回复
热议问题