在我的应用程序中,我的处理程序不会停止。如何停止处理程序?
它在关闭活动后继续开始。我能做什么?
代码是:
handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
if(i<max)
{
evnetChangedisplay(i);
i++;
handler.sendEmptyMessageDelayed(0, 5000);
}
else
{
i = 0;
handler.sendEmptyMessageDelayed(0,0000);
}
}
};
handler.sendEmptyMessageDelayed(0,000);
答案 0 :(得分:61)
听起来这个活动在Handler执行代码之前完成了它的生命周期。您可以通过为处理程序和runnable创建实例成员来管理handler.post(runnable),然后在Activity Lifecycle方法中管理处理程序。
private Handler myHandler;
private Runnable myRunnable = new Runnable() {
@Override
public void run() {
//Do Something
}
};
使用handler.post启动runnable。
protected void onStart() {
super.onStart();
myHandler = new Handler();
myHandler.post(myRunnable);
}
如果在调用onStop时没有执行runnable,我们不想运行它。 删除onStop方法中的回调:
protected void onStop() {
super.onStop();
mHandler.removeCallbacks(myRunnable);
}
答案 1 :(得分:10)
考虑:
private Handler myHandler= new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case 0:
this.removeMessages(0);
messageSendingCodeWhat0();
break;
default:
super.handleMessage(msg);
break;
}
}
};
答案 2 :(得分:10)
答案 3 :(得分:6)
它永远不会停止,因为你总是在发送消息!我想你要删除handler.sendEmptyMessageDelayed(0,0000);
,这实际上没有意义(你是否将消息延迟0毫秒?)。
答案 4 :(得分:5)
Handler只是一个线程事件循环的接口。因此,如果你停止线程,那么你“停止”处理程序。
假设您的处理程序是用于后台线程。
这是一个示例,其中quit()旨在将looper.quit()方法发送到事件循环,该循环将停止线程和处理程序。
public class MyThread extends Thread
{
private Handler m_handler;
@Override
public void run()
{
Looper.prepare();
m_handler = new Handler();
Looper.loop();
}
// Simply post the quit runnable to the thread's event loop
public void quit()
{
m_handler.post(new QuitLooper());
}
// Inner Runnable which can be posted to the handler
class QuitLooper implements Runnable
{
@Override
public void run()
{
Looper.myLooper().quit();
}
}
}
因此,在Activity的onPause()或onStop()方法中,只需调用myThread.quit()。
答案 5 :(得分:4)
只要Looper实例处于活动状态,您的处理程序(如果实现的话)将处于活动状态,这对于线程的整个生命周期(与活动生命周期几乎没有关系)。
如果您希望处理程序停止重新触发,您需要自己处理它。
无论如何,向自己发送0延迟的消息看起来有些奇怪。实际上你想要实现什么目标?