簡體   English   中英

Android Studio內部循環延遲

[英]Android Studio Delay inside Loop

我想按用戶想要的時間循環播放,但要延遲3秒。

這是代碼:

for (i = 0;i < n1; i++){
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(KeyMapCreator.this, "Try number " + i,Toast.LENGTH_SHORT).show(); ActionIwantToDo();
                }
            },3000);
        }

變量i是用戶設置的變量 問題在於烤面包片不會每3秒顯示一次,它就像沒有延遲的正常循環一樣。 我以為是因為烤面包的時間,但是如果我將時間設置為20秒,還是一樣。 有人知道如何在循環內進行適當的延遲嗎???

處理程序只是安排一些工作,以便以后執行。 它實際上並沒有阻塞當前線程。 您要做的只是安排n1項工作在三秒后執行,所有工作都將在確切的延遲后按順序執行。

您實際上根本不想編寫代碼來阻塞主線程。 永遠。 它將使您的應用似乎無響應。

您的問題是您的循環會立即創建許多處理程序,並延遲3秒鍾,然后顯示吐司。 它們不會彼此等待,並且因為它們是在彼此之間的毫秒內創建的,所以它們將同時顯示吐司。

我不確定您要完成什么,循環可能不是您想要的。 但是,這是一種使吐司在3秒后和之后每3秒顯示多次的方法。

為此,我們將使用遞歸,因為它將使您不會在主線程上被阻塞。

  1. 從需要該函數啟動的位置調用doSomething(遞歸函數)(請記住,第二個變量是您希望其運行的次數,並且只需要0作為計數器)
doSomething(0, 3)
  1. 創建doSomething
private void doSomething(int i, int n) {
   new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
         if (i < n) {
            Toast.makeText(KeyMapCreator.this, "Try number " + i,Toast.LENGTH_SHORT).show();
            actionIWantToDo();
            doSomething(i+1, n);
         }
      }
   }, 3000);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM