处理程序不停止 - Android
Handler not stopping - 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()
这样,你不应该直接调用运行。如果您的 运行 喜欢这样,那么就没有必要从处理程序中删除它。所以附加 Runnable 和 Handler。
void startRepeatingPins() {
pinHandler.post(mPinSetter);
}
您在 finally
中添加了 post 延迟,这意味着您首先停止 if 循环并在 finally 中重新开始,因此它永远不会停止。所以像这样改变你的运行nable,
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);
}
}
};
我创建了一个处理程序来重复执行一项任务,我还想在满足条件后在该处理程序中销毁它。
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()
这样,你不应该直接调用运行。如果您的 运行 喜欢这样,那么就没有必要从处理程序中删除它。所以附加 Runnable 和 Handler。
void startRepeatingPins() {
pinHandler.post(mPinSetter);
}
您在 finally
中添加了 post 延迟,这意味着您首先停止 if 循环并在 finally 中重新开始,因此它永远不会停止。所以像这样改变你的运行nable,
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);
}
}
};