2016-12-23 24 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