在不使用线程的情况下延迟几秒钟

时间:2011-07-15 07:46:25

标签: android delay

如何在不使用threads.some函数的情况下延迟几秒钟,我可以在任何地方调用以延迟。 Android内置功能是首选。感谢

2 个答案:

答案 0 :(得分:18)

使用Handler,使用postDelayed()等方法向其发送简单消息或Runnable。

例如,定义一个Handler对象来接收消息和Runnables:

private Handler mHandler = new Handler();

定义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 );

        }
    };

导致在ms指定的延迟后将Runnable发送到处理程序:

mHandler.postDelayed(mUpdateTimeTask, 1000);

如果您不希望向Runler发送Runnable的复杂性,您也可以使用方法sendEmptyMessageDelayed()向其发送消息 - 即使是空消息也是如此,以便最简单。

答案 1 :(得分:0)

从静态上下文调用延迟方法

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

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

来自使用静态方法的任何类

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