2016-12-23 31 views
0

我有一個應用程序,它顯示一個視頻。在某些時候,我想提供有關視頻地點的信息。例如,歷史地名。我使用此代碼:android handler.postDelayed在很多地方使用

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    //Do something after 100ms 
    } 
}, 100); 

但是,當我在無數次使用這個postDelayed評論一些消息不顯示或超車。延遲顯示一些文本的最佳解決方案是什麼?例如5秒後顯示A文本,15秒後顯示B文本,30秒後顯示C文本。我的代碼如下所示:

 switch() 

     case 1: 
     openVideo(video1) 

     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
      //my message 
      } 
     }, 4000); 

break; 
     case 2: 

     openVideo(video2) 

     final Handler handler2 = new Handler(); 
     handler2.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
      //my second message 
      } 
     }, 3000); 


     handler2.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
      //my third message 
      } 
     }, 15000); 

break; 
+0

你可以使用計時器 –

+1

Handler.postDelayed()是這樣做的正確方法。你的代碼可能有其他問題。 – Rasmusob

+0

你想要此代碼以分開的方式再次運行 –

回答

2

使用多次運行。增加每個文本的持續時間。

int mDuration=0,mAnimationDuration=5000; 


mDuration=mDuration+mAnimationDuration; 

//it called after 5 seconds 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
    //Your first text 
} 
}, mDuration); 

mDuration=mDuration+mAnimationDuration; 

//it called after 10 seconds 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
//Your second text 
} 
}, mDuration); 

mDuration=mDuration+mAnimationDuration; 

//it called after 15 seconds 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
    //Your third text 
} 
}, mDuration); 
+0

所有我的文本在相同的textview上改變,所以,我正在使用開關盒。每個案例都有其新的處理程序。處理程序給出錯誤。有時文字不會改變或超過。可能是在每種情況下使用新處理程序的錯誤,我不確定。 – mehmet

+0

@mehmet你錯過了你的開關中的break語句** case 2 ** ..這可能是問題。 –

+0

@Ranjth最後一行有中斷 – mehmet

1

使用定時器每一秒......

new Timer().scheduleAtFixedRate(new TimerTask() { 
       @Override 
       public void run() { 
       //put you code here 
       //or set switch case for time 5,10,15 seconds 
       } 
      }, 0, 1000);//put here time 1000 milliseconds=1 second 
+0

timer和handler.postDelay之間的主要區別是什麼? – mehmet

+0

定時器是自動重新執行指定的時間戳,接受答案,如果你得到滿意的答案。 – Naitik