#android #process
#Android #процесс
Вопрос:
У меня такая ситуация, когда я должен запустить действие из моего MainActivity. Но я хочу, чтобы это новое действие запускалось как новый процесс (с новым идентификатором процесса). Возможно ли достичь этого в Android. Приветствуется любая помощь.
Комментарии:
1. «Но я хочу, чтобы это новое действие запускалось как новый процесс (с новым идентификатором процесса)». — почему? Я не могу придумать для этого веской причины. В конце концов, все, что вы будете делать, это тратить оперативную память, процессор и батарею без всякой пользы.
2. Чтобы перегрузить систему, снова и снова запуская новые процессы… существует хорошо известная ошибка, из-за которой вы получите root-доступ, как только будет достигнут предел PID и ADB попытается перезапустить. При загрузке он делает это в режиме суперпользователя. После завершения своих действий он пытается установить свои разрешения, чтобы быть обычным пользователем, но поскольку достигнуто ограничение PID, этот процесс завершается с ошибкой. У вас остается доступ к командной строке и root. Я бы предположил, почему он этого хочет 😉
3. Я не знаю, зачем это нужно операционной системе, но у меня есть вариант использования: я хочу запустить, а затем закрыть стороннюю библиотеку, которая, как я знаю, не очищается после себя (ее нельзя безопасно перезапустить внутри того же процесса). Возможность запуска нового процесса с новой JVM и новыми экземплярами собственных библиотек может быть важна.
4. Помимо того факта, что приведенные выше комментарии являются невежественными, не вам решать, зачем кому-то нужен определенный фрагмент кода. Существует множество приложений, которые могли бы использовать отдельный контейнер приложений. Например, если у вас есть веб-сервер, работающий в том же пространстве процессов, что и ваши действия, и сервер выходит из строя, вы не можете предоставить какие-либо инструменты, и вы, вероятно, потеряете ключевую контекстную информацию о самом сбое, в зависимости от того, как вы регистрируете свои данные. Возможность запускать отдельный процесс для кода, который может привести к сбою, является обязательной функцией. Несмотря на то, что может сказать невежество.
Ответ №1:
Просто введите android:process=»:ProcessName» для вашего действия в AndroidManifest.xml
<activity
android:name=".YourActivity"
android:screenOrientation="portrait"
android:process=":YourProcessName">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
В этом случае «YourActivity» будет запущен в другом процессе с именем «YourProcessName».
Комментарии:
1. Можете ли вы дать немного больше объяснений по этому поводу. Я не знаю об этом.
2. это просто установит новый процесс для действия, который будет отличаться от другого, который вы использовали ранее. таким образом, у вас может быть process1 для activity1 и process2 для activity2 .
3. @AndroSelva У меня запущено основное действие. Возможно ли запустить то же действие, что и другой процесс?