Java类中打印this导致手机不能启动问题


问题1:发现在Handler中加类似Log.d(TAG,"create handler 1 "+ this);导致系统不能启动。

  1.  public class Handler {  
  2.     public Handler() {  
  3.         if (FIND_POTENTIAL_LEAKS) {  
  4.             final Class<? extends Handler> klass = getClass();  
  5.             if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&  
  6.                     (klass.getModifiers() & Modifier.STATIC) == 0) {  
  7.                 Log.w(TAG, "The following Handler class should be static or leaks might occur: " +  
  8.                     klass.getCanonicalName());  
  9.             }  
  10.         }  
  11.   
  12.         mLooper = Looper.myLooper();  
  13.         if (mLooper == null) {  
  14.             throw new RuntimeException(  
  15.                 "Can't create handler inside thread that has not called Looper.prepare()");  
  16.         }  
  17.         mQueue = mLooper.mQueue;  
  18.         Log.d(TAG,"create handler 1 "this);      //本行代码导致系统不能启动   
  19.         mCallback = null;  
  20.     }  
  21.   
  22.     @Override  
  23.     public String toString() {  
  24.         return "Handler (" + getClass().getName() + ") {"  
  25.         + Integer.toHexString(System.identityHashCode(this))  
  26.         + "}";  
  27.     }  
Answer:  Unknown

问题2:在Handler.toString中加打印this语句导致不能启动

  1.     @Override  
  2.     public String toString() {  
  3.         Log.d(TAG,"this="+this);  
  4.         return "Handler (" + getClass().getName() + ") {"  
  5.         + Integer.toHexString(System.identityHashCode(this))  
  6.         + "}";  
  7.     }  
Answer:   打印this导致toString被调用,因此会出现循环调用。

相关内容