Java 如何在两个for循环中分别使用postdayed或sleep两次
我想数到5秒,然后启动一个函数。该函数还需要每3秒调用一次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
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秒调用一次内部函数。