1. 程式人生 > >單例物件的建立時機在第一次getInstance時

單例物件的建立時機在第一次getInstance時

如題:單例物件的建立時機在第一次getInstance時

為說明此問題,摘錄工程中的一段程式碼如下:

/**
 * @className TimerUI
 * @description TODO 倒計時介面顯示類
 * @author [email protected]
 * @date 2014-02-27 4:10:28 PM
 */
public class TimerUI {
    
    private static final String TAG = "TimerUI";
    private static TimerUI mTimerUi = new TimerUI();

    private static final int MSG_ANIM_END = 0;
    private Handler mHandler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            
        }
        
    };
    
    private TimerUI(){
        Log.d(TAG, "TimerUI()");
    }
    
    public static TimerUI getInstance(){
        return mTimerUi;
    }

}

雖然TimerUI的物件是static的。但並不是工程載入之初就建立其物件的。

而是第一次執行TimerUI.getInstance()。


之前在此的認識一直有誤區。

認為static變數mTimerUi在程式載入之處就建立。隨在Thread裡第一次執行了

getInstance()

而Handler是不可以在Thread裡面建立。最終報初始化錯誤:


java.lang.ExceptionInInitializerError

Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()