如果我有一個本地Service
和在Service
,我有功能:doHeavyThings()
。在我連接Activity
與本地Service
在onServiceConnected(...)
後,我應該在UI線程中調用mService.doHeavyThings()
?它會阻止我的UI線程嗎?任何人都可以解釋它?提前致謝!我應該在UI線程中調用`Service`的函數嗎?
0
A
回答
3
A Service
總是
默認情況下**在UI線程上運行。 因此,爲了避免ANR的doHeavyThings()
方法應該剛剛開始一個新的Thread
這是所有繁重的工作。
如果您想了解結果,您必須自行實施。例如,您可以將Messanger
傳遞給Service
,該號碼將用於從Service
傳回給呼叫者。
下面的文章介紹如何使用Messanger
在Service
提供雙向通信: http://developer.android.com/guide/components/bound-services.html
另一種方法是使用IntentService
。你可以閱讀更多關於它在這裏: http://developer.android.com/reference/android/app/IntentService.html
** - 您可以使用android:process
屬性,爲<service>
聲明AndroidManifest.xml
文件裏在一個單獨的進程中運行它。 (感謝級堆垛機)
3
它取決於服務是否異步(通過回調)或同步傳遞其結果。
如果它同步傳遞結果,則不能在UI線程上調用這些方法。儘管UI線程將簡單地等待結果,而Service和綁定線程執行實際工作,但由於UI線程等待控制流的緣故,UI仍將被阻塞。
所以使用AsyncTask,HandlerThread或Thread。
如果服務異步傳遞其結果,那麼很可能會從UI線程中調用方法。
相關問題
- 1. 應該在UI線程中調用findviewbyid嗎?
- 2. 我應該在EDT中創建的線程中調用InvokeLater嗎?
- 3. 函數應該調用嗎?
- 4. 我應該在Web應用程序中保護UI嗎?
- 5. 我應該使用內聯函數我的程序嗎?
- 6. 我應該在構造函數中調用成員函數
- 7. unSubscribeOn調用了什麼線程?我們應該叫它嗎?
- 8. 我應該只從主線程調用NSSavePanel runModal方法嗎?
- 9. 我應該在多線程範例中鎖定數據表嗎?
- 10. 我們應該從Servlet的init()和service()方法中調用destroy()方法嗎?
- 11. 我應該在大量使用的函數中使用`inline`嗎?
- 12. 我應該用下劃線開始一個輔助函數嗎?
- 13. 應該在主線程之外的線程中調用URLForUbiquityContainerIdentifier:
- 14. 我們應該通過引用函數標記調用嗎?
- 15. Java - 如何向UI線程發佈事件或調用UI線程的函數?
- 16. iOS - 何時在主線程中調用UI更改函數
- 17. 我應該在後臺線程中使用異步方法嗎?
- 18. 我應該檢查內核代碼中的線程數量嗎?
- 19. 我可以在主線程(UI線程)之外創建UI嗎?
- 20. 在Java中的線程內調用線程時應該考慮什麼?它應該被避免嗎?
- 21. WPF客戶端 - 我應該在後臺線程中調用WCF服務嗎?
- 22. 我們應該在線程類中寫入原始線程函數
- 23. 我應該在DLL的函數中使用靜態變量嗎?
- 24. Can Angular Service可以在調用服務的Controller中調用一個函數嗎?
- 25. 我應該在我的應用程序中使用Log.d嗎?
- 26. 我應該在python中隨機包中使用randint函數嗎?
- 27. 我應該在我的dealloc函數中釋放IBOultet嗎?
- 28. 我應該在ServiceController上調用Close()嗎?
- 29. 我應該總是在父進程中調用listen()嗎?
- 30. 在Java FX UI中使用應該返回結果的線程
只是一個說明。服務也可以在屬於應用程序的進程的主(「UI」)線程上運行,但與活動的主UI線程運行的進程是分開的。當然,這要求IPC。 - 我對OP的理解是它是第三方服務。另外,我的理解是,這個問題只涉及援引這樣的第三方服務。 – 2013-03-04 09:35:11
你是對的。感謝您指出了這一點。 – Paul 2013-03-04 09:36:29