2012-03-27 113 views
1

我剛剛發現下面就Android官方網站代碼:擴展IntentService類

@Override 
    protected void onHandleIntent(Intent intent) { 
     // 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) { 
       } 
      } 
     } 
    } 

同時我也閱讀了以下論斷:

  • 創建一個默認的工作線程執行交付給所有意圖onStartCommand()與應用程序的主線程分開。
  • 創建一次將一個意圖傳遞給onHandleIntent()實現的工作隊列,因此您不必擔心多線程。

因此,如果IntentService使用工作線程,我從來不必擔心多線程,那麼爲什麼我需要在onHandleIntent(...)方法中使用同步塊?謝謝。

回答

1

因此,如果IntentService使用工作線程,我從來不必擔心多線程,那麼爲什麼我需要在onHandleIntent(...)方法中使用同步塊?

IntentService工作線程。在該線程上調用onHandleIntent()

然而,生命週期方法(onCreate()onStartCommand()onBind()onDestroy()等)被稱爲主應用程序線程上。

如果在工作線程和主應用程序線程中都會使用對象,則需要通過某種方式同步其訪問權限。

順便說一句,你引用的代碼示例是奇怪的,我不知道爲什麼谷歌正在使用它。如果您需要睡覺(在生產應用程序中不常見),請使用SystemClock.sleep()

+0

非常感謝。 – user1166635 2012-03-27 16:18:11