删除回调在 Handler 中不起作用

Remove callback not working in Handler

我 Handler.I 每 10 次调用我的函数 second.Code 工作完美,但我无法停止 handler.This 是我的源代码

handler=new Handler();
handler.post(runnable);
public Runnable runnable = new Runnable() {

    @Override
    public void run() {
        myFunction(position);
        handler.postDelayed(runnable,10000);
    }
};
public void myFunction(int position)
{
    if(position>10)
        handler.removeCallbacks(runnable);
}

我可以每 10 秒调用一次函数,但我无法停止handler.Ho我能解决我的问题吗?

您删除了 myFunction 中的回调,但是当 myFunction returns 时您再次 postDelayed,只是反转 运行()

中的行
@Override
    public void run() {       
        handler.postDelayed(runnable,10000);
        myFunction(position);
    }

问题是myFunction去掉了回调,然后你还是调用handler.postDelayed安排新的回调。有很多方法可以重构它。例如:

handler=new Handler();
handler.post(runnable);
public Runnable runnable = new Runnable() {

    @Override
    public void run() {
        boolean reschedule = myFunction(position);
        if(reschedule) {
            handler.postDelayed(runnable,10000);
        }
    }
};
public boolean myFunction(int position)
{
    if(position>10) {
        return false;
    }
    return true;
}

您不必删除处理程序上的回调,因为不会首先安排新回调。