2017-04-25 4 views
0

싱글 톤 클래스에 대한 질문이 있습니다. next() 메서드를 호출하면 mProcessIndex가 증가 할 것으로 예상되지만 실제로는 스택 오버 플로우 오류가 발생하지 않습니다. 그래서, 문제는 mProcessIndex 값을 수정하는 올바른 방법은 무엇입니까? 아래Java - Infinity Loop 싱글 톤 클래스 메서드 호출

코드 :

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 ++를 next() 전에 호출하십시오.;

관련 문제