2

當開發一個新的系統服務時,我想確保我是正確的。說例如我有一個名爲MySystemManagerService的新的SystemService。所以我必須創建一個MySystemManager。 (類似於PackageManager & PackageManagerService,ActivityManager & ActivityManagerService)。Android:Manager和SystemService體系結構

我想知道什麼是由經理& ManagerService組合來實現,只使用服務,而我們不能做到同樣的事情。

對此有任何想法對我都有很大的幫助。

回答

3

處理系統服務的傳統方法是有一個經理和ManagerService。這樣做的原因是管理器封裝了您希望用戶可用的所有功能。 PackageManager和ActivityManager就是很好的例子,但範圍很大。對於一個更小的例子,我會看DevicePolicyManagerDevicePolicyManagerService

你可以看到,管理器根本就沒有做任何事情,除了包裝醜陋​​的try catch語句並使事情看起來更好一些。它也很好地包裝了所有暴露給開發人員的功能。這基本上就是你要離開經理的全部。

如果你看一下,該管理器調用(在服務),你會看到這個enforceCrossUserPermission(userhandle)方法的任何方法。它自己的服務正在進行權限檢查。雖然開發人員可以通過存根手動處理服務,但如果它正在執行安全檢查,它仍然不能使用該服務提供的任何方法。

該服務可以是豐富的,提供了很多功能給系統這種方式,但你仍然可以公開服務的某些部分給用戶。只要您對不希望隨機用戶使用的方法執行安全檢查,該功能仍然是系統的一部分。

綜上所述,如果你是在揭露公共SDK爲你的MOD那麼你真的應該遵循的模式,使用戶的生活更加輕鬆規劃。但是,如果您只想向系統提供服務,則可以按照與上面鏈接相同的方式進行權限檢查,並將您的功能保留在系統本地。

只要記住,任何功能,你不執行上基本上暴露給用戶的安全檢查,並可以使用的用戶怎麼過希望。

+0

謝謝你的解釋。這對我有幫助。但通常情況下,如果我們看到大多數處理髮生在ManagerService中。 Manager只提供了一個ManagerService實例。我對麼?任何細節regd哪種方法/功能分別進入管理器和ManagerService –

+1

對我的答案進行了一些編輯,因爲我瞭解到,您可以通過存根直接訪問服務,所以經理做的比我第一次想到的要少。這對於公共SDK來說確實是一件非常方便的事情。 Manager沒有系統權限,因此您想公開的SystemService中的任何方法都不應該有安全檢查。 –