处理程序不停止 - Android
问题描述:
我创建了一个处理程序来重复执行一个任务,并且我还希望在条件满足后在该处理程序中销毁它。处理程序不停止 - Android
pinHandler = new Handler();
现在,我创建了两个函数分别启动和停止任务。现在
void startRepeatingPins() {
mPinSetter.run();
}
Runnable mPinSetter = new Runnable() {
@Override
public void run() {
try{
System.out.println("PinIndwx count is :"+pinIndexCount);
if(pinIndexCount==(plist.size()-1))
{
stopUpdatingPins();
pinIndexCount=0;
//pinHandler.removeCallbacks(mPinSetter);
System.out.println("Handler stopped by itself.");
}
else
{
updatePoint(plist.get(pinIndexCount));
pinIndexCount++;
}
}
finally {
pinHandler.postDelayed(mPinSetter, pinInterval);
}
}
};
private void stopUpdatingPins()
{
pinIndexCount=0;
pinHandler.removeCallbacks(mPinSetter);
System.out.println("Called the stop function.");
}
,问题是,如果我称之为stopUpdatingPins
功能,处理程序停止,但是当我尝试从处理程序中自动停止它,它只是不停止。虽然stopUpdatingPins
函数确实被调用。
答
更改你这样的startRepeatingPins()
,你不应该直接调用run。如果你这样运行,那么从处理程序中删除它是没有意义的。所以将Handnable与Handler连接起来。
void startRepeatingPins() {
pinHandler.post(mPinSetter);
}
您在finally
后加入延迟,这意味着你在第一循环,如果在最后重新启动被停止,所以它永远不会停止。所以改变你的runnable像这样,
Runnable mPinSetter = new Runnable() {
@Override
public void run() {
System.out.println("PinIndwx count is :"+pinIndexCount);
if(pinIndexCount==(plist.size()-1))
{
stopUpdatingPins();
pinIndexCount=0;
//pinHandler.removeCallbacks(mPinSetter);
System.out.println("Handler stopped by itself.");
}
else
{
updatePoint(plist.get(pinIndexCount));
pinIndexCount++;
pinHandler.postDelayed(mPinSetter, pinInterval);
}
}
};
为什么它会停止当我明确调用removecallbacks但不是当我在处理程序中调用它时? – driftking9987
我在自己的回答中解释过**你在最后添加了延迟,这意味着如果循环并在最后再次启动,你首先停止**这意味着你正在停止,但是你又立即开始。 –