Waheed Khan
Waheed Khan

Reputation: 1321

give a delay of few seconds without using threads

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

Upvotes: 8

Views: 15810

Answers (2)

Trevor
Trevor

Reputation: 10993

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().

Upvotes: 18

Cyril Jacquart
Cyril Jacquart

Reputation: 2762

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

Upvotes: 0

Related Questions