如何在不使用threads.some函数的情况下延迟几秒钟,我可以在任何地方调用以延迟。 Android内置功能是首选。感谢
答案 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