android-Ultra-Pull-To-Refresh icon indicating copy to clipboard operation
android-Ultra-Pull-To-Refresh copied to clipboard

内存泄漏

Open xiongtj opened this issue 7 years ago • 7 comments

/** * 当mLoadingStartTime为0时 这里强转会越界 转成一个很大的整数 * 后面执行postDelayed(mPerformRefreshCompleteDelay, delay) 会造成内存泄漏 * 可把delay 改成 long * long delay = (mLoadingMinTime - (System.currentTimeMillis() - mLoadingStartTime)); * */

final public void refreshComplete() { if (DEBUG) { PtrCLog.i(LOG_TAG, "refreshComplete"); }

    if (mRefreshCompleteHook != null) {
        mRefreshCompleteHook.reset();
    }

    int delay = (int) (mLoadingMinTime - (System.currentTimeMillis() - mLoadingStartTime));
    if (delay <= 0) {
        if (DEBUG) {
            PtrCLog.d(LOG_TAG, "performRefreshComplete at once");
        }
        performRefreshComplete();
    } else {
        postDelayed(mPerformRefreshCompleteDelay, delay);
        if (DEBUG) {
            PtrCLog.d(LOG_TAG, "performRefreshComplete after delay: %s", delay);
        }
    }
}

xiongtj avatar Jul 12 '16 10:07 xiongtj

希望修复

xiongtj avatar Jul 12 '16 10:07 xiongtj

postDelayed的参数描述本来也是long,所以虽然mLoadingStartTime会被更新,但为了消除隐患,同意楼主的意见

van048 avatar Jul 12 '16 12:07 van048

希望修复

liang55 avatar Jul 13 '16 09:07 liang55

这个东西也太无聊了吧

holleQiang avatar Jul 29 '16 09:07 holleQiang

这个问题还挺严重的呢,请修改下,现在的版本可以这样避免:

mPtrLayout.refreshComplete();
改为
if (mPtrLayout.isRefreshing()) {
       mPtrLayout.refreshComplete();
}

LeonHover avatar Mar 13 '17 02:03 LeonHover

@LeonHover 哇,你是对的,我也是这样想的,在每个refreshComplete前面带上 isRefreshing

iielse avatar Sep 22 '17 09:09 iielse

学习一下,顺便优化,把那个if也加上

Klay-11 avatar Mar 14 '18 08:03 Klay-11