0

我有处理程序。我每 10 秒调用一次函数。代码运行良好,但我无法停止处理程序。这是我的源代码

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 秒调用一次我的函数,但我无法停止处理程序。我能解决我的问题吗?

4

2 回答 2

0

您删除了 myFunction 中的回调,但是当 myFunction 返回时再次发布延迟,只需反转 run() 中的行

@Override
    public void run() {       
        handler.postDelayed(runnable,10000);
        myFunction(position);
    }
于 2017-03-29T20:36:46.543 回答
0

问题是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;
}

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

于 2017-03-29T20:48:34.633 回答