簡體   English   中英

Android Runnable在removeCallbacks()之后沒有停止

[英]Android Runnable not stopping after removeCallbacks()

我試圖使用removeCallbacks停止Runnable,但是不知何故它不會停止。 -這是我的變量

 private int mInterval = 2000; // 2 seconds by default, can be changed later
private Handler mHandler = new Handler();

和我可運行的

Runnable mStatusChecker = new Runnable() {
    @Override
    public void run() {
        try {

                checkPayNow();

        } finally {
            // 100% guarantee that this always happens, even if
            // your update method throws an exception
            mHandler.postDelayed(mStatusChecker, mInterval);
        }
    }
};

和我正在運行的方法,直到它給我一定的值,然后我停止

public void checkPayNow(){

    if (!url.isEmpty()){

        //url now has text

        mHandler.removeCallbacks(mStatusChecker);
    }else {
        //no text yet
    }


}

您可以嘗試在沒有removeCallbacks情況下進行removeCallbacks如下所示:

Runnable mStatusChecker = new Runnable() {
    @Override
    public void run() {
        if(!checkPayNow()) {
//if not ready so far, then check in some delay again
            mHandler.postDelayed(mStatusChecker, mInterval);
        }
    }
};

public boolean checkPayNow(){

    return !url.isEmpty();


}
boolean stoped = false;

Runnable mStatusChecker = new Runnable() {
    @Override
    public void run() {
        try {    
             checkPayNow();
        } finally {
           if(!stoped)
            mHandler.postDelayed(mStatusChecker, mInterval);
        }
    }
};

要停止時,使stoped = true

並從checkPayNow()刪除處理程序。

public void checkPayNow(){

    if (!url.isEmpty()){
        //url now has text
        //mHandler.removeCallbacks(mStatusChecker);
    }else {
        //no text yet
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM