2012-07-04 2 views
1

У меня есть 2 приложения с тем же значением SharedUserId в манифесте, App1 и App2. App1 имеет компонент Service, который указан для запуска в отдельном процессе (в манифесте android: process = ": remote"). Основная цель этой услуги - проверить App2. Я хочу, чтобы служба выполняла некоторую очистку, когда App2 закрывается.Принудительное закрытие приложения убивает службу другого приложения с тем же общим идентификатором пользователя?

Когда я заставляю закрыть App2, сервис App1 убит, и его метод onDestroy() не вызывается. Как я могу гарантировать, что служба App1 не будет убита (или, по крайней мере, заканчивается вызовом onDestroy), когда я блокирую приложение App2?

редактировать: Android 4.0.1 на Galaxy Nexus, если это делает разницу

ответ

0

Да, это возможно. Если вы используете sharedUserId, представьте, что эти 2 приложения работают в одном потоке, что означает, что они имеют один и тот же жизненный цикл приложения, что в основном означает, что с «принудительным закрытием» в любом из этих приложений вы завершаете свою нить.

Смысл в том, что все в этой теме убито. Одна из негативных вещей при использовании sharedUserID и sharedProcess между приложениями, а не в использовании контент-провайдеров.

Я не думаю, что есть работа вокруг, когда вы закрываете приложение. Может быть, вы должны просто закончить его «обычным» способом и позволить os убить его.

UPDATE от Вашего комментария:

В общем, я не склонен вмешиваться в такого рода вещи. Пользователь может захотеть вручную закрыть приложение, как я привык делать, и было бы раздражать, если у вас есть служба или приложение, работающие снова и снова.

Это моя точка зрения. Несмотря на мое убеждение, есть трюк, чтобы вручную перезапустить приложение после закрытия силы, когда было обработано необработанное исключение, и я думаю, что реакция силы, близкая к пользователю, будет одинаковой. Вы можете добавить ожидающее намерение в сервисе, я думаю: Android: How to auto-restart application after it's been "force closed"?

+0

Если бы это зависело от меня, я бы разрешил os убить его. Я просто имею дело с случаем, когда пользователь решает убить его сам. Включает ли sharedUserId приложения в один и тот же процесс? [Документация] (http://developer.android.com/guide/topics/manifest/manifest-element.html) указывает, что они будут запускаться в том же процессе «при желании». – Matt

+0

Да, это правда, разве у вас нет того же sharedProcess в ваших приложениях? Я заметил, что для совместного использования ресурсов в 2 приложениях вы должны включить один и тот же атрибут процесса в оба приложения. Несмотря на то, что sharedUserID работает отлично с версиями 2.x, в 3.x и некоторых 4.0 он не работал. Я думаю, это некоторые новые функции безопасности. У вас нет таких же проблем? – 10s

+0

У меня нет того же sharedProcess в моих приложениях. Обмен данными работает очень хорошо (я могу читать и записывать файлы App2 из App1). – Matt

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

  • Нет связанных вопросов^_^