В соответствии со стандартной документацией на Android предпочтительным способом запуска службы (запущенной службы) является использование явного намерения, подобного этому:
// Using explicit intent:
Intent serviceIntent = new Intent(getApplicationContext(), MyService.class);
// or:
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
Вы также можете запустить/остановить службу, используя неявное намерение с строкой действия, указанной в манифесте, например:
// Using implicit intent:
static final String serviceAction = "com.example.my.app.services.MYSERVICE";
Intent serviceIntent = new Intent(serviceAction);
startService(serviceIntent);
// AndroidManifest.xml:
<service android:name="com.example.my.app.services.MyService"
android:exported="false" android:process=":services" >
<intent-filter>
<!-- Start/Stop service -->
<action android:name="com.example.my.app.services.MYSERVICE" />
</intent-filter>
</service>
Когда служба используется только локально (сторонние приложения не могут запускаться или привязаны к ней), в документации говорится, что вы не должны включать фильтр намерений в манифесте service, и вы должны установить тег экспортированный в значение false.
Примечание: действия и службы выполняются в отдельных процессах (: приложения и: процессы служб). Связь между активностью и сервисом осуществляется путем реализации интерфейсов AIDL (это делается потому, что только удаленное взаимодействие AIDL позволяет мне выполнять многопоточность в службе, которая должна обрабатывать IPC одновременно, причем не только между действиями, но главным образом между службами, запущенными внутри: услуг).
Мои вопросы:
Q1: Когда действия и службы, которые я использую в своем приложении, запускаются в двух разных процессах, мне нужно использовать неявные намерения по явным намерениям для запуска и остановки служб?
Q2: Когда процесс приложения завершен (уничтожен, а не в памяти), а процесс: службы запущен в фоновом режиме, как мне снова подключиться из нового процесса приложения к уже запущенному: сервису? Как-то мне нужно снова обратиться к процессу: services, чтобы я мог остановить запущенную службу внутри этого процесса. Это невозможно сделать с помощью AIDL afaik.
Проблема заключается в том, что Android может и может легко уничтожить процесс приложения: когда из-за ресурсов, и это нормально для меня, пока процесс: services продолжает работать. (Да, я знаю о влиянии на процесс, установив службу как службу переднего плана и т.д. Я тоже могу прочитать руководства;) но это не моя проблема).
Я не могу найти какую-либо информацию или ответы, связанные с моими вопросами, когда действия и службы находятся в разделенных процессах и используют AIDL, а когда: процесс приложения должен "найти" процесс: services снова после его смерти Android или когда пользователь снова заходит в приложение (после того, как он/она оставил приложение раньше).
Любые консультации на уровне экспертов приветствуются.