2017-04-25 64 views
0

我有一个关于单例类的问题。当我调用方法next()时,我期望mProcessIndex会增加,但实际上,它不会导致stackoverflow错误。所以,问题是修改mProcessIndex值的正确方法是什么?Java - 无限循环Singleton类的方法调用

代码如下

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++; 
      } 
     } 
    } 
} 

回答

1

的问题是:

next(); 
mProcessIndex++; 

应该是:

mProcessIndex++; 
next(); 
+0

愚蠢的错误..谢谢 –

0

你的下一个()函数进入无限递归循环的在递增mProcessIndex之前调用相同的。因此mProcessIndex i从未增加过。调用mProcessIndex ++在下一个()之前;