首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Handler.postdelayed

Handler.postdelayed
EN

Stack Overflow用户
提问于 2011-05-17 02:20:08
回答 2查看 15.5K关注 0票数 3

我正在使用handler.postDelayed方法为一些动画内容创建一些延迟。

这样我就可以用Mediaplayer播放一些歌曲了。用户可以通过单击next退出此操作类。但在下一个屏幕上,即使我在next按钮的onclicklistener中调用了stop方法,同样的歌曲仍在继续。

是否由于加载下一个活动后添加的时间延迟所致。有什么想法吗?

代码语言:javascript
复制
handler.postDelayed(new Runnable() {
        public void run() {
            mp = MediaPlayer.create(getApplicationContext(), R.raw.num2);
            mp.start();
            imageView1.setImageResource(R.drawable.countcat2);
        }
    }, 2000);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-17 02:23:43

您是否添加了一个Log来查看是否调用了run()?我假设您的处理程序未注册;毕竟,postDelayed将一直等到循环程序再次启动。

我想你的动画比那些2000ms快吧?在你的活动消失后,你无论如何都不能调用你的处理程序,它正在访问imageView1,我认为它在onDestroy中被销毁了。

您可以考虑添加一个标志,强制在onDestroy中立即调用该操作,并且/或者您可以使用Timer。在计时器的情况下,确保在它被销毁后不要使用像imageView1这样的东西。

票数 2
EN

Stack Overflow用户

发布于 2013-04-08 09:06:40

使用线程。然后通过中断来停止它:

代码语言:javascript
复制
Public Thread getThread(final Handler handle, int delay)
{
  return new Thread() 
  {
    @Override
    public void run() 
    {
      try
      {
         synchronized(this) 
         {
           Thread.sleep(delay);     
           handle.post(new Runnable() 
           {    
             @Override
             public void run() 
             {      
               "the code to be exec."
             }
           });

         }    
     }
       catch(Exception e)
       {
    e.printStackTrace();
       }
    };
  };
}

或者,您可以使用postDelayed函数

代码语言:javascript
复制
Public Thread getThread(final Handler handle, int delay)
{
  return new Thread() 
  {
    @Override
    public void run() 
    {
      try
      {
         synchronized(this) 
         {  
           handle.postDelayed(new Runnable() 
           {    
             @Override
             public void run() 
             {      
               "the code to be exec."
             }
           }, delay);

         }    
     }
       catch(Exception e)
       {
    e.printStackTrace();
       }
    };
  };
}

你会发现这两种方法有一点不同。要中断它,请执行以下操作:

代码语言:javascript
复制
  Thread t = getThread(handle, delay);
  t.start();
  if(t != null)
  {
   if (t.isAlive())
   {
     t.interrupt();
   }
 }

希望我能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6021610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档