2017-04-25 65 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 ++在下一個()之前;