我有什麼似乎是一個愚蠢的要求:我可以在調用UI線程上的方法時阻止我的服務線程?
我需要阻止我IntentService線程同時運行我必須從UI線程訪問一個方法。我怎樣才能做到這一點?
顯然,我可以通過Handler
與Looper.getMainLooper()
運行UI方法,但當然我的服務處理的其餘部分會繼續。
一些詳細信息:
我的服務同步的內容,而使用粘合劑回調,逐步更新與新項目的UI。所有影響項目列表的方法都是UI-Thread綁定,以避免我的StaggeredGridLayout引發ConcurrentModificationExceptions。
然而,當我服務啓動我想打電話給名單之前,我同步的內容每個源獲得電流id的,這是需要的UI線程訪問。
我不能在啓動服務時提供此列表的原因是應用程序必須保持響應(意味着可以在我們同步時刪除項目),並且需要在每個額外的內容源之前檢查列表是同步
解決方案:
我想出了,是創建兩個處理器,一個在主尺蠖的UI方法,其它的一切,他們之間發送短信的最佳解決方案。它不覺得自己是個可以接受的,乾淨的解決方案
另一個是使相同的用戶界面方法的線程版本,做的內容的arraycopy並與複製循環開始。我不確定arraycopy操作是否不安全(容易發生ConcurrentModificationException),因爲很難觸發該錯誤。所以我不確定這是可以接受的。
通常,您的服務線程*是* UI線程。 –
這是一個IntentService,我應該澄清 –
包裝訪問列表的方法應該這樣做'synchronized'塊應該這樣做 – nandsito