单例对象的创建时机在第一次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()


猜你喜欢

转载自blog.csdn.net/liu_zhen_wei/article/details/20459135
今日推荐