Изменить, чтобы сосредоточиться на проблеме
Этот вопрос кажется трудным для понимания.Вот краткое изложение.
Я, по-видимому, не понимаю реальных последствий android:process
.Кто может мне это объяснить?
Я уже пробовал что-то, но все еще не понял это правильно.Подробности см. В тексте ниже, но основная проблема заключается в следующем: что на самом деле делает этот тег?
- Что происходит, когда разные приложения получают доступ к службе, которая выполняется в «процессе приложения»?Могут ли одни и те же объекты жить в разных процессах, если служба продолжает работать?
- Где я могу заметить различия в вариациях тега?
Не очень много вопросов, чтобы спросить меня, что явидел и что я пробовал.Я пробовал разные вещи и видел неожиданные эффекты, которые не совпадают с тем, что я читал в документах.Для этого мне нужны факты, никаких предположений.
Оригинальный вопрос
Приложения могут привязываться к моему сервису Android.Служба управляет содержимым, которое должно быть одинаковым для всех приложений, а также, если одно приложение отсоединяется и связывается снова.Служба живет долго, я могу убедиться в этом с помощью значка на переднем плане.
Теперь я не могу понять значение android:process
, по всему интернету много информации, но она не соответствует тому, что яопыт.
Чтобы проверить, что я вхожу в обработчик сообщений и другие места, такие как onBind
- хэш-код экземпляра службы
- идентификатор процесса
- хеш-код статического объекта в классе обслуживания.
Затем я связываюсь со своей службой из внешнего приложения.Он генерирует
- для каждой привязки новый хеш-код экземпляра службы
- один и тот же pid для всех привязок
- хеш-код того же статического объекта
Вопрос 1
Это говорит о том, что процесс обслуживания остается активным между привязками, но он всегда создает новый экземпляр службы.Правильно ли я с этим предположением?
Вопрос 2
Самое смешное, сказанное выше верно, если я не укажу android:process
, или процесс, начинающийся с двоеточия, или процесс, начинающийся ссимвол нижнего регистра, который на самом деле задокументирован, чтобы иметь разные эффекты.
Разве я не должен получать разные идентификаторы процессов с двоеточием?Что я не так понимаю?
Что andorid:process
лучше указать?Я предполагаю, что тот, который начинается в нижнем регистре, потому что он выполняется в глобальном процессе, но я не вижу разницы в моем тесте.
Вопрос 3
Поскольку мне нужно сохранить внутренние объекты, этоможно сохранить статический / одноэлементный объект, который используется всеми экземплярами службы и синхронизирует доступ к этому объекту внутренне?
Вопрос 4
Я проверял, что происходит, когда я запускаю действие в том жеAPK, который создает экземпляр службы.Когда внешнее приложение связывается с моей службой, хэш-код статического объекта для экземпляра службы действия и экземпляров службы, созданных на внешней привязке, одинаков, если не указано android:process
.
Если я указываю имя (с или бездвоеточие) эти хэши разные.
Для меня это означает, что без имени процесса существует только один процесс, создающий все экземпляры службы, поэтому статический объект создается только один раз.При заданном имени процесса действие и служба запускаются в разных процессах.Прав ли я, если я объясню это явным именем процесса в разделе манифеста службы, которое заставляет служебную часть моего apk находиться в отдельном процессе?
Так что, если я также хочу, чтобы действие получило доступ к тем же даннымЛучше не указывать имя процесса в манифесте?Как это соответствует глобальному процессу, который я получаю с именем, начинающимся со строчной буквы?
Редактировать: Надеюсь, это прояснит то, что я хочу.
У меня есть служба, которая управляет некоторыми данными,К нему обращаются приложения, в основном одно приложение, но должно быть возможно несколько приложений.Это приложение / приложения могут быть активными или нет, оно приходит ... оно идет ... и всегда привязывается к сервису.
Каждая привязка создает новый экземпляр службы. Но мне нужен доступ к тому же базовому классу. Теперь я спросил, как этого добиться. Класс Singleton, используемый каждой связанной службой?
Для этого мне нужно убедиться, что все привязки входят в один и тот же процесс. (верно? может это уже неправильно)
Изучение андроида: тег процесса поднял еще несколько вопросов, см. Выше. Так что я был бы рад получить более глубокое понимание этой темы. Никакое предположение, но знание и понимание очень мне помогут.
Я связываюсь со службой, затем использую Messenger для обмена сообщениями со службой. AIDL или другие средства для непосредственного вызова методов в службе отсутствуют.