2012-06-24 128 views
6

我有一個IntentService類,可以從複雜應用程序中的各個地方啓動 - 活動,後臺線程,其他服務。我想保留一個服務被調用了多少次的計數器。我在我的IntentService類中使用一個私有的int變量來跟蹤它,我從我的onStartCommand(...)方法中增加它。IntentService的onStartCommand(..)方法線程安全嗎?

它剛剛發生在我身上,因爲可以從各種異步線程調用onStartCommand(...)方法,這可能不是線程安全的解決方案。所以問題是,我是否需要在同步塊中包裝對此計數器變量的訪問,或者onStartCommand(...)的IntentService實現是否爲我處理此問題?作爲一個說明,我知道我可以安全地從onHandleIntent(...)增加變量,但我需要計算實際的請求,而不是執行的意圖。

回答

14

它只是發生在我身上,因爲可以從各種異步線程調用onStartCommand(...)方法,這可能不是線程安全的解決方案。

onStartCommand()總是在任何服務的主應用程序線程中調用。您不能在兩個線程中同時使用onStartCommand()進行調用。

+0

每天學習新事物。謝謝! –

+0

所以它不是線程安全的? – digitizedx

+0

@digitizedx:是**什麼**不是線程安全的? 'onStartCommand()'只是在主應用程序線程上調用過。 – CommonsWare