2014-09-28 141 views
1

通過閱讀Android page on Services,他們展示了一個基本的IntentService實現的例子。我計劃實施類似的東西,因爲它需要綁定。但是,我很困惑他們爲什麼需要使用下面的synchronized塊。如果有人能夠闡明這一點,我會非常感激。爲什麼在這裏需要同步?

// Handler that receives messages from the thread 
    private final class ServiceHandler extends Handler { 
     public ServiceHandler(Looper looper) { 
      super(looper); 
     } 
     @Override 
     public void handleMessage(Message msg) { 
      // Normally we would do some work here, like download a file. 
      // For our sample, we just sleep for 5 seconds. 
      long endTime = System.currentTimeMillis() + 5*1000; 
      while (System.currentTimeMillis() < endTime) { 
       synchronized (this) { 
        try { 
         wait(endTime - System.currentTimeMillis()); 
        } catch (Exception e) { 
        } 
       } 
      } 
      // Stop the service using the startId, so that we don't stop 
      // the service in the middle of handling another job 
      stopSelf(msg.arg1); 
     } 
    } 
+0

我不知道什麼wait()方法,可能睡覺的線程。恕我直言,同步塊已過時,只要wait()方法不啓動單獨的線程。 – 2014-09-28 03:06:54

+0

如果我們都得到一個猜測,那麼我的猜測是確保線程在睡眠時不會中斷。沒有其他人可以通知線程,如果他們不能同步()它。但是,似乎沒有必要考慮演示。 – 2014-09-28 03:34:05

+0

Plz引用此:http://stackoverflow.com/questions/9892144/extending-the-intentservice-class – 2014-09-28 03:44:12

回答

1

該示例試圖模擬真實IntentService例如下載文件。考慮這個故事: 你要求它下載一個文件,因爲它在它模擬的代碼中被評論,通過等待5ms。爲了調用wait函數,你需要一個同步塊。爲什麼? ,因爲如果你沒有它拋出IllegalMonitorStateException