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