处理程序postDelayed仅在循环内执行1次

时间:2015-03-10 21:03:51

标签: android handler postdelayed

我是android编程的新手。我在postDelayed中遇到问题,即使我想调用的值大于1,延迟只在循环内执行一次。

这是我的代码

protected void managerOfSound() {

    int size = tempq.size();

    for (int i = 0; i < tempq.size(); i++) {
        String u =tempq.get(i);



    //WHOLE
        if (u.equals("a4")){
            mp = MediaPlayer.create(this, R.raw.a4);


      handler.postDelayed(new Runnable(){
               @Override
               public void run() {  
                   mp.start();
               }            
            },2000);

      }else if (u.equals("b4")){
            mp = MediaPlayer.create(this, R.raw.b4);

       handler.postDelayed(new Runnable(){
               @Override
               public void run() {  
                   mp.start();
               }            
            },2000);
       }
   }
}

例如

在播放媒体播放器之前,我想要延迟2秒和另外2秒等等,这取决于我想要调用多少个值...例如,值是a4,a4和a4。我想在每次调用值时延迟2秒。有没有人可以用这个帮助莫?提前致谢! :)

2 个答案:

答案 0 :(得分:4)

你的问题是你在for循环中运行postDelayed。你同时运行处理程序n次。你可以同时启动所有这些(因为完成foor循环需要不到一毫秒)。你应该 在时间量上加counter

之类的东西
handler.postDelayed(new Runnable(){
           @Override
           public void run() {  
               mp.start();
           }            
        },countr += 2000);

答案 1 :(得分:0)

以下是带有延迟计时器的可运行的工作示例。

public Runnable timedTask = new Runnable()
{

    @Override
    public void run()
    {
        // type code here which will loop with the given delay



        //if you want to end the runnable type this in the condition
        if(condition) {

        handler.removeCallbacks(this);
        return;

         }



        //delay for the runnable
        handler.postDelayed(timedTask, 2000);
    }
};

您可以通过输入以下内容从任何地方调用此方法:

handler.post(timedTask);
希望它有所帮助!