我正在使用handler.postDelayed方法为某些动画内容创建一些延迟。
我正在使用Mediaplayer播放一些歌曲。用户可以通过单击下一步退出此操作类。但是在下一个屏幕上,即使我在下一个按钮的onclicklistener中调用了stop方法,同一首歌也在继续。
是否由于添加的时间延迟导致在下一个活动加载后执行。有什么想法吗?
handler.postDelayed(new Runnable() {
public void run() {
mp = MediaPlayer.create(getApplicationContext(), R.raw.num2);
mp.start();
imageView1.setImageResource(R.drawable.countcat2);
}
}, 2000);
答案 0 :(得分:2)
您是否添加Log
以查看run()
是否被调用?我假设您的处理程序未注册;毕竟,postDelayed
会等到弯针重新开始。
我认为你的动画比2000ms更快?在您的活动消失后,您将无法调用您的处理程序,它正在访问我imageView1
中我认为已销毁的onDestroy
。
您可以考虑添加一个标志,强制在onDestroy
中立即调用该操作,和/或您可以使用Timer
。如果是计时器,请确保在销毁之后不要使用imageView1
之类的内容。
答案 1 :(得分:0)
使用线程。然后中断停止它:
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函数
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();
}
};
};
}
你会发现这两种方法之间有一点差别。要打断它,请执行以下操作:
Thread t = getThread(handle, delay);
t.start();
if(t != null)
{
if (t.isAlive())
{
t.interrupt();
}
}
希望我有所帮助。