0

我有一个关于单例类的问题。当我调用方法 next() 时,我希望 mProcessIndex 会增加,但实际上不会增加​​,因此会导致 stackoverflow 错误。那么,问题是修改 mProcessIndex 值的正确方法是什么?

下面的代码

public class HomePopupDisplayManager {
    private static HomePopupDisplayManager sInstance;
    private List<WeakReference<HomePopupMessage>> mMessages;
    private int mProcessIndex;

    private HomePopupDisplayManager() {
        mMessages = new ArrayList<>();
        mProcessIndex = 0;
    }

    public static synchronized HomePopupDisplayManager getInstance() {
        if (sInstance == null) {
            sInstance = new HomePopupDisplayManager();
        }

        return sInstance;
    }

        public void register(@NonNull HomePopupMessage message, @IntRange(from = 0) int order) {
            mMessages.add(order, new WeakReference<>(message));
    }

    public void next() {
        if (mProcessIndex >= 0 && mProcessIndex < mMessages.size()) {
            HomePopupMessage message = mMessages.get(mProcessIndex).get();
            if (message != null) {
                next();
                mProcessIndex++;
            }
        }
    }
}
4

2 回答 2

1

问题出在:

next();
mProcessIndex++;

应该:

mProcessIndex++;
next();
于 2017-04-25T03:48:41.603 回答
0

您的 next() 函数进入无限递归循环,因为在增加 mProcessIndex 之前调用了相同的函数。因此 mProcessIndex 永远不会增加。在 next() 之前调用 mProcessIndex++

于 2017-04-25T03:57:32.850 回答