Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果超过5秒,则启动动画_Java_Android_Timer - Fatal编程技术网

Java 如果超过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秒) 当然,您可以启动自己的线程来启动动画(在我看来,这可能是最好的解决方案): 编辑: 在阅读您最

如何检查Java(Android)中是否已过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) {

    }
};