如果我有一個Binder對象表示一個遠程接口(對於Android服務或遠程客戶端的回調接口),當從多個線程通過此對象發送IPC時是否需要顯式同步,還是由底層的Android組件?Android AIDL/Binder接口對象是線程安全的嗎?
4
A
回答
1
在Android中調用Binder RPC方法是線程安全的,您可以在不同步的情況下從多個線程發出調用。
在接收端 - 假設服務處於與其通常不同的進程中 - 您可以從一個Binder線程池接收調用,而不管它在調用方如何調用。這意味着您的服務可能有多個呼叫同時運行,因此請注意這一點。在Android的文檔
3
有界服務使用粘合劑類,如果我們想要客戶端和服務在同一個進程中運行,並且不希望在不同的應用程序執行併發IPC實現。 因此調用服務方法的線程(在客戶端)將被阻塞,直到它返回。 可能會在客戶端(活動)中產生多個線程,每個線程在任何時刻都會調用服務方法。因此,服務應該實現爲線程安全的,因爲可能一次有多個線程調用服務方法。 結論是,當Binder類擴展到實現有界服務時,android並不關心同步。
如果我們希望允許來自不同應用程序的客戶端訪問IPC的服務並希望處理服務中的多線程,則使用AIDL實現有界服務。結論是,當AIDL被用來實現有界服務時,android並不關心同步。
相關問題
- 1. 這會使對象線程安全嗎?
- 2. Android DownloadManager線程安全嗎?
- 3. 什麼是線程安全的對象
- 4. 線程安全對象 - 是否靜態?
- 5. 是DatagramSocket.send線程安全嗎?
- 6. 是TcpClient.Available線程安全嗎?
- 7. 線程安全(是嗎?)
- 8. 是unique_ptr線程安全嗎?
- 9. 是System.DirectoryServices.AccountManagement.GroupPrincipal線程安全嗎?
- 10. 是sqlite.swift線程安全嗎?
- 11. 是DocumentBuilder.parse()線程安全嗎?
- 12. 是Microsoft.Practices.EnterpriseLibrary.Data.Database.SetParameterValue線程安全嗎?
- 13. 是長線程安全嗎?
- 14. 是javax.sql.DataSource線程安全嗎?
- 15. 是java.util.UUID線程安全嗎?
- 16. 這是鎖定線程安全的正確對象嗎?
- 17. 在scala對象中,是不可變的val線程安全嗎?
- 18. 鏈接線程安全集合線程安全嗎?
- 19. 存儲在線程安全集合線程中的對象是否安全?
- 20. Win32窗口線程安全嗎?
- 21. Android SDK的CircularArray線程安全嗎?
- 22. 接口是「對象」嗎?
- 23. Python套接字對象是否線程安全?
- 24. 對象成員對於Callable&ExecutorService是否是線程安全的
- 25. Silverlight的CollectionViewSource是線程安全的嗎?
- 26. 線程不安全的對象
- 27. EJB 3.0,是線程安全的嗎?
- 28. LWP :: UserAgent不是線程安全的嗎?
- 29. python zipfile是線程安全的嗎?
- 30. 是JavaMailSenderImpl的spring線程安全嗎?