Открытие камеры в другом процессе

В некоторых приложениях Kitkat Samsung у одного из моих приложений есть серьезная проблема для отдыха. Проблема возникает чаще при съемке, и она не наблюдается в crappy Jellybean Samsung с половиной ОЗУ. Журналы показывают низкое состояние памяти, хотя не выбрано OutOfMemoryException. Я думаю, что там более агрессивная политика закрытия активности в Kitkat (или приложение камеры по умолчанию негерметично).

Мне было интересно, закрывает ли ОС мои ​​действия, когда моя память приложений высока, или же она закрывает их, когда общая память, используемая всеми приложениями, высока. Если ОС имеет порог для каждого процесса, возможно, открытие камеры в другом процессе может помочь.

Я знаю, что можно запустить сервис в своем собственном процессе, используя атрибут process в манифесте. Предполагая, что для Activities не существует эквивалентного атрибута, если я запустил прокси-сервис в своем собственном процессе и затем начал работу с этой службы, будет ли выполняться и этот процесс в этом процессе?

Ответ 1

Описанное поведение полностью согласуется с документацией Основы приложений, из которой ясно, что "открытие камеры в другом процессе" t поможет вам, потому что это то, что уже происходит по умолчанию:

Когда система запускает компонент, он запускает процесс для этого приложения (если он еще не запущен) и создает классы, необходимые для компонента. Например, если ваше приложение запускает действие в приложении камеры, которое фиксирует фотографию, это действие выполняется в процессе, относящемся к приложению камеры, а не в вашем приложении.

Итак, когда приложение камеры перенесено на передний план, ваше приложение переходит в фоновый режим, что делает его одним из кандидатов, который должен быть убит системой, когда он низко в памяти по Процессы и жизненный цикл приложения. Вы наблюдаете нормальное поведение ОС. Общий объем ОЗУ не является ключевым моментом. Свободная память об объеме, доступном для процесса на переднем плане.

С учетом сказанного ответ на ваш вопрос Нет. Любой Activity запускается и запускается в приложении (процессе), из которого он был первоначально объявлен через файл манифеста, независимо от того, из какого процесса приходит запрос на запуск.

Команда

adb shell ps | grep 'app_name'

сообщит вам, какие процессы выполняются в вашем приложении и приложении камеры.

Два приложения могут работать в одном и том же процессе, но необходимое условие для этого - та же самая подпись приложений... Из Основы приложений:

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