2016-09-26 2 views
0

Возьмем, к примеру, чтобы TextToSpeech класса, чей конструктор требует аргумент типа, который контекста. Мой вопрос, в чем разница между getSystemService который не требует никакого другого аргумента, чем строковой константы и типа-литого и getApplicationContext который вы бы пройти в класс, такие как TextToSpeech?Понимание разницы между getSystemService() и getApplicationContext()

+0

Они возвращают два разных типа объектов. –

+0

Так getSystemService возвращает уровень абстракции, чтобы вы могли взаимодействовать с сервисом, например AudioManager? – Joseph

ответ

1

Одним словом,

  • getApplicationContext() возвращает контекст тока приложение, работающее в выделенном процессе, в то время как
  • getSystemService(String name)«возвращает дескриптор службы системного уровня по имени «, где служба на системном уровне работает в отдельном процессе и « handle » позволяет ссылаться методы обслуживания через межпроцессную связь (IPC).

Я надеюсь, разница вы говорите, относится к модели Android безопасности, которая, AFAIK, делится на 2 категории WRT вызова служб системного уровня, управляемые servicemanager:

  1. системы- которые могут быть доступны/использованы без специального разрешения на стороне приложения/файл манифеста (например, LAYOUT_INFLATER_SERVICE, PackageManager и другие);
  2. сервисы на уровне системы, которые явно требуют определенного разрешения (с) из приложения (или его хоста Linux) для успешного доступа. Разрешения предоставляются физическим пользователем устройства.

Поскольку никаких конкретных разрешения не требуется, чтобы получить доступ к сервисам системного уровня 1-й категории, взаимодействие с ними может быть обернуто с дополнительным уровнем абстракции, который требует Context в качестве параметра, чтобы получить доступ к услугам (например TextToSpeech API).

Смежные вопросы