give a delay of few seconds without using threads

前端 未结 2 1877
渐次进展
渐次进展 2020-12-31 19:53

How can I give a delay of few seconds without using threads.some function that I can call anywhere for giving delay. Android built-in function is highly preferred. Thanks

相关标签:
2条回答
  • 2020-12-31 20:17

    Use a Handler, and send either a simple message or a Runnable to it using a method such as postDelayed().

    For example, define a Handler object to receive messages and Runnables:

    private Handler mHandler = new Handler();
    

    Define a Runnable:

    private Runnable mUpdateTimeTask = new Runnable() {
        public void run() {
            // Do some stuff that you want to do here
    
        // You could do this call if you wanted it to be periodic:
            mHandler.postDelayed(this, 5000 );
    
            }
        };
    

    Cause the Runnable to be sent to the Handler after a specified delay in ms:

    mHandler.postDelayed(mUpdateTimeTask, 1000);
    

    If you don't want the complexity of sending a Runnable to the Handler, you could also very simply send a message to it - even an empty message, for greatest simplicity - using method sendEmptyMessageDelayed().

    0 讨论(0)
  • 2020-12-31 20:23

    Call delayed method from a static context

    public final class Config {
        public static MainActivity context = null;
    }
    

    In MainActivity:

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        ...
        Config.context = this;
        ...
    }
    
    ...
    
    public void execute_method_after_delay(final Callable<Integer> method, int millisec)
    {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                try {
                    method.call();
                }
                catch (Exception e) {
    
                }
            }
        }, millisec);
    }
    

    From any class using static methods:

    private static void a_static_method()
    {
    
        int delay = 3000;
        Config.context.execute_method_after_delay(new Callable<Integer>() {
            public Integer call() {
                return method_to_call();
            }
        }, delay);
    
    
    }
    
    public static Integer method_to_call()
    {
        // DO SOMETHING
    
    0 讨论(0)
提交回复
热议问题