Возможно ли запустить действие как новый процесс

#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 У меня запущено основное действие. Возможно ли запустить то же действие, что и другой процесс?