Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 Android什么是最快最合适的循环/重复数学的方法?_Java_Android - Fatal编程技术网

Java Android什么是最快最合适的循环/重复数学的方法?

Java Android什么是最快最合适的循环/重复数学的方法?,java,android,Java,Android,我开始用Android编程,创建一个不断计算并显示快速变化数字的游戏(基本加法,但数字很大) 我在按下按钮时使用了.postDelayed(),但我觉得这不是最好或最有效的方法。我也想知道什么是最快的建议速度的东西,重复 我的按钮的作用如下: buttonAdd.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEve

我开始用Android编程,创建一个不断计算并显示快速变化数字的游戏(基本加法,但数字很大)

我在按下按钮时使用了
.postDelayed()
,但我觉得这不是最好或最有效的方法。我也想知道什么是最快的建议速度的东西,重复

我的按钮的作用如下:

    buttonAdd.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    myMethod();
                    buttonAdd.postDelayed(myMethodRun, delay);
                    break;
                case MotionEvent.ACTION_UP:
                    buttonAdd.removeCallbacks(myMethodRun);
                    break;
            }
            return true;
        }
    });

    Runnable myMethodRun = new Runnable() {
        @Override
        public void run() {
            myMethod();
            buttonAdd.postDelayed(this, delay);
        }
    };
我也在考虑使用root视图创建一个
postDelayed()

while(true)
是这样做的好方法吗?我不想让一切负担过重


这样做吗?还是我会使用太多的UI线程?显然,我还是有点新手我想永远重复一个方法,我想知道一个游戏推荐的最快延迟时间是多少

,重要的是用户体验,其中一个主要部分是帧数。如果你保持一个像样的帧数,比如每秒30帧,那么用户会感觉到游戏中的所有过渡都是平滑的。或者足够光滑,如果你愿意的话。如果你达到更高的帧速率,比如每秒60帧,游戏可能会有更好的感觉,但这种差异几乎不值得移动设备上额外的功耗。(目前,60 fps仅适用于在高端硬件上运行的高端游戏,如控制台或配备顶级图形卡的台式PC。)

因此,如果每秒拍摄30帧,则只需每33毫秒渲染一帧。执行计算的速度超过这个速度是没有意义的,因为这意味着你将计算你永远不会渲染的东西,因此用户将永远看不到


因此,只需设置一个计时器,每33毫秒触发一次,进行计算,渲染帧,返回操作系统,直到计时器再次触发。

好建议,迈克!非常感谢。我将研究一下
计时器
类。
body.postDelayed(runForever, delayTime);

Runnable runForever = new Runnable() {
        @Override
        public void run() {
            runForever();
            buttonAdd.postDelayed(this, delay);
        }
    };