Должен ли я использовать android: process =: remote в моем приемнике?

У меня есть BroadcastReceiver, который вызывается время от времени, и я заметил, что многие люди используют

android: process =":remote" 

в их приемнике. Мой используется для проверки нескольких вещей и, если условия совпадают, активирует сигнал тревоги. Мой вопрос: должен ли я использовать строку, которую я разместил выше, в своем манифесте? И если да, то каковы преимущества этого?


person Jason    schedule 30.11.2010    source источник
comment
В каком контексте (деятельность, услуга и т. д.) определяется получатель?   -  person Pentium10    schedule 30.11.2010
comment
Получатель определяется в манифесте, он вызывается из утилиты AlarmManager Android.   -  person Jason    schedule 01.12.2010


Ответы (1)


Определив свой приемник с помощью android:process=":remote", вы фактически запускаете свой приемник в другом процессе (= VM). Для типичных случаев использования вам не нужно запускать это в другом процессе, и все, что вы хотите сделать, вероятно, может отлично работать локально (в вашем процессе APK).

Недостаток использования android:process=":remote" заключается в том, что для его запуска требуются дополнительные ресурсы (в данном случае отдельный процесс). При этом вы в основном имеете дело с двумя виртуальными машинами, а некоторые шаблоны, такие как синглтоны, статические поля больше не могут использоваться совместно вашим приложением и удаленной службой.

Преимущество использования android:process=":remote" заключается в том, что в некоторых случаях может быть удобно запустить службу, которая будет продолжать работать (в своем собственном процессе) после завершения работы приложения, или если вы хотите, чтобы удаленные клиенты могли привязать к вашему сервису. Ваш широковещательный приемник не будет блокировать основной поток вашего приложения при запуске в отдельном процессе при вызове метода onReceive() (однако есть и другие способы реализации этого).

Я обнаружил, что в большинстве случаев для наиболее распространенных случаев использования вы можете обойтись без использования android:process=":remote".

person ddewaele    schedule 10.12.2010
comment
могу я спросить, какие еще способы реализации неблокирующего метода onreceive() вы упоминаете wpuld? На самом деле у меня происходит именно этот сценарий, метод onReceive, который на самом деле выполняет некоторую работу, и я подозреваю, что это может вызывать некоторые проблемы в моем программном обеспечении... - person TiGer; 11.07.2014
comment
Существует еще одно неявное преимущество, которое не упоминается: при запуске компонента в отдельном процессе у вас есть новая куча виртуальной машины для использования. Поэтому, если ваше приложение выполняет операции с интенсивным использованием памяти, отдельный процесс может быть решением, позволяющим избежать ошибок нехватки памяти. - person Rodrigo Dias; 22.07.2014
comment
Как можно общаться с таким получателем, я пытался общаться через Sharedpreferences, но это не работает, так как удаленный получатель имеет первую копию, и ни одна из них не преуспевает в исходных данных. - person humblerookie; 11.04.2015