Java 如果超过5秒,则启动动画
如何检查Java(Android)中是否已过5秒Java 如果超过5秒,则启动动画,java,android,timer,Java,Android,Timer,如何检查Java(Android)中是否已过5秒 为此,可以使用System.nanoTime()来测量经过的时间 例如,您可以执行以下操作: long start = System.nanoTime(); while (System.nanoTime() - start < 5000000); StartAnimation(); 另外,如果线程正在做一些其他事情,您可以这样做(但这不是5秒) 当然,您可以启动自己的线程来启动动画(在我看来,这可能是最好的解决方案): 编辑: 在阅读您最
为此,可以使用
System.nanoTime()
来测量经过的时间
例如,您可以执行以下操作:
long start = System.nanoTime();
while (System.nanoTime() - start < 5000000);
StartAnimation();
另外,如果线程正在做一些其他事情,您可以这样做(但这不是5秒)
当然,您可以启动自己的线程来启动动画(在我看来,这可能是最好的解决方案):
编辑:
在阅读您最后的评论后:
我将把这个逻辑传递给startAnimation:
try {
Thread.sleep(5000);
startAnimation();
} catch (InterruptedException e) {
// handle Interruption Exception here
}
// Class variable:
long lastAnimationStart = 0;
void StartAnimation() {
if (lastAnimationStart = 0 || System.nanoTime() - lastAnimationStart >= 5000000) {
lastAnimationStart = System.nanoTime();
// Animation stuff here
}
}
您应该使用处理程序并向其发送延迟消息。大概是这样的:
private static final int MSG_START_ANIMATION = 1337;
private Handler mAnimationHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_START_ANIMATION:
startAnimation();
break;
}
}
};
private final ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mAnimationHandler.removeMessages(MSG_START_ANIMATION);
mAnimationHandler.sendEmptyMessageDelayed(MSG_START_ANIMATION, TimeUnit.SECONDS.toMillis(5));
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
另外,请阅读这篇关于通过内部处理程序类泄漏上下文的博文:
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(5000);
// Make sure animation will run on UI Thread!
runOnUiThread(new Runnable() {
@Override
public void run() {
StartAnimation();
}
});
} catch (InterruptedException e) {
// Handle exception
}
}
}).start();
// Class variable:
long lastAnimationStart = 0;
void StartAnimation() {
if (lastAnimationStart = 0 || System.nanoTime() - lastAnimationStart >= 5000000) {
lastAnimationStart = System.nanoTime();
// Animation stuff here
}
}
private static final int MSG_START_ANIMATION = 1337;
private Handler mAnimationHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_START_ANIMATION:
startAnimation();
break;
}
}
};
private final ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mAnimationHandler.removeMessages(MSG_START_ANIMATION);
mAnimationHandler.sendEmptyMessageDelayed(MSG_START_ANIMATION, TimeUnit.SECONDS.toMillis(5));
}
@Override
public void onPageScrollStateChanged(int state) {
}
};