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 如何在两个for循环中分别使用postdayed或sleep两次_Java_Android_Multithreading_Handler - Fatal编程技术网

Java 如何在两个for循环中分别使用postdayed或sleep两次

Java 如何在两个for循环中分别使用postdayed或sleep两次,java,android,multithreading,handler,Java,Android,Multithreading,Handler,我想数到5秒,然后启动一个函数。该函数还需要每3秒调用一次 Toast.makeText(this, "Countdown 5", Toast.LENGTH_SHORT).show(); Handler handler = new Handler(); for (int i = 5; i >= 0; --i) { final int idx = i; handler.postDelayed(() -> { Toast.makeText(MyActiv

我想数到5秒,然后启动一个函数。该函数还需要每3秒调用一次

Toast.makeText(this, "Countdown 5", Toast.LENGTH_SHORT).show();
Handler handler = new Handler();

for (int i = 5; i >= 0; --i) {
    final int idx = i;
    handler.postDelayed(() -> {
        Toast.makeText(MyActivity.this, "Countdown " + (idx - 1), Toast.LENGTH_SHORT).show();
        if (idx == 0) {
            int messageSize = messageItems.size();
            for (int j = 0; j < messageSize; j++) {
                final int jdx = j;
                Handler handler1 = new Handler();
                handler1.postDelayed(() -> {
                    Toast.makeText(MyActivity.this, messageItems.get(jdx), Toast.LENGTH_SHORT).show();
                }, 3000 * jdx);
            }
        }
    }, 1000 * (5-idx));
}
Toast.makeText(这是“倒计时5”,Toast.LENGTH_SHORT).show();
Handler=newhandler();
对于(int i=5;i>=0;--i){
最终int idx=i;
handler.postDelayed(()->{
Toast.makeText(MyActivity.this,“倒计时”+(idx-1),Toast.LENGTH\u SHORT.show();
如果(idx==0){
int messageSize=messageItems.size();
对于(int j=0;j{
Toast.makeText(MyActivity.this,messageItems.get(jdx),Toast.LENGTH_SHORT.show();
},3000*jdx);
}
}
},1000*(5-idx));
}
内环部分在没有外环的情况下工作良好

        int messageSize = messageItems.size();
        for (int j = 0; j < messageSize; j++) {
            final int jdx = j;
            Handler handler1 = new Handler();
            handler1.postDelayed(() -> {
                Toast.makeText(MyActivity.this, messageItems.get(jdx), Toast.LENGTH_SHORT).show();
            }, 3000 * jdx);
        }
int messageSize=messageItems.size();
对于(int j=0;j{
Toast.makeText(MyActivity.this,messageItems.get(jdx),Toast.LENGTH_SHORT.show();
},3000*jdx);
}

我想添加一个功能,比如5秒倒计时。然后启动Toast消息。Toast消息还需要每3秒进行一次Toast。

请尝试此代码。这给出了相当准确的结果。有时会出现一些滞后,但不会明显。吐温一下,让我为你干杯

Toast.makeText(this, "Countdown 5", Toast.LENGTH_SHORT).show();
Handler handler = new Handler();

for (int i = 5; i >= 0; --i) {
    final int idx = i;
    handler.postDelayed(() -> {
        Toast.makeText(MyActivity.this, "Countdown " + (idx - 1), Toast.LENGTH_SHORT).show();
        if (idx == 0) {
            int messageSize = messageItems.size();
            for (int j = 0; j < messageSize; j++) {
                final int jdx = j;
                Handler handler1 = new Handler();
                handler1.postDelayed(() -> {
                    Toast.makeText(MyActivity.this, messageItems.get(jdx), Toast.LENGTH_SHORT).show();
                }, 3000 * jdx);
            }
        }
    }, 1000 * (5-idx));
}
    int counter = 5;
    Handler handler = new Handler();

    ArrayList<String> messageItems = new ArrayList<>();
    messageItems.add("Message 1");
    messageItems.add("Message 2");
    messageItems.add("Message 3");

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            counter--;
            if (counter > 0) {
                Log.d("HOME", "onCreate: countdown " + counter + " " + System.currentTimeMillis());
                handler.postDelayed(this, 1000);
            }
            if (counter == 1) {
                for (int j = 0; j < messageItems.size(); j++) {
                    final int jdx = j;
                    Handler handler1 = new Handler();
                    handler1.postDelayed(() -> {
                        Log.d("HOME", "onCreate: countdown " + messageItems.get(jdx) + " " + System.currentTimeMillis());
                    }, 3000 * jdx);
                }
            }
        }
    };

    Log.d("HOME", "onCreate: countdown 5 " + System.currentTimeMillis());
    handler.postDelayed(runnable, 1000);

所以我的理解是,你想在5秒后启动一个函数,但也想在倒计时时显示Toast,然后在最初的5秒后每隔3秒执行一些其他代码。是吗?倒计时(每1秒5次)->调用一个function(数组大小每3秒一次)@RanjanYeah,所以内部函数只能在5秒后第一次调用,对吗?是的。倒计时后,每3秒调用一次内部函数。