Handler 和callback 机制

时间:2024-11-17 17:29:46
  • private void shutdownOrRebootInternal(final boolean shutdown, final boolean confirm,  
  •         final String reason, boolean wait) {  
  •     if (mHandler == null || !mSystemReady) {  
  •         throw new IllegalStateException("Too early to call shutdown() or reboot()");  
  •     }  
  •   
  •     Runnable runnable = new Runnable() {  
  •         @Override  
  •         public void run() {  
  •             synchronized (this) {  
  •                 if (shutdown) {  
  •                     (mContext, confirm);  
  •                 } else {  
  •                     (mContext, reason, confirm);  
  •                 }  
  •             }  
  •         }  
  •     };  
  •     // ShutdownThread must run on a looper capable of displaying the UI.  
  •     Message msg = (mHandler, runnable);  
  •     (true);  
  •     (msg);//向PowerManagerService发送message  
  •   
  •     // () is documented not to return so just wait for the inevitable.  
  •     if (wait) {  
  •         synchronized (runnable) {  
  •             while (true) {  
  •                 try {  
  •                     ();  
  •                 } catch (InterruptedException e) {  
  •                 }  
  •             }  
  •         }  
  •     }