删除回调函数在Handler中不起作用

时间:2017-03-29 20:31:58

标签: android android-handler android-runonuithread

我有Handler。我每隔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秒调用一次myfunction,但我无法停止处理。我可以解决我的问题吗?

2 个答案:

答案 0 :(得分:0)

你删除了myFunction中的回调,但是当myFunction返回时你再次postDelayed,只是在run()中反转行

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

答案 1 :(得分: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;
}

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