Как убить процесс? - PullRequest
       4

Как убить процесс?

3 голосов
/ 07 мая 2011

У меня есть два действия, первое запускается Launcher, второе запускается первым. Когда я убиваю процесс из первой активности, процесс убивается. Но когда я убиваю его из второго действия, система немедленно запускает новый процесс и первое действие. (PID процесса изменился.) Как я могу сделать это чисто?

Я попробовал 3 различных способа уничтожить процесс: System.exit (0), android.os.Process.killProcess (pid) и не программным способом с панели «Устройства» в Eclipse.

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

public class FirstActivity extends Activity  {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ((Button)findViewById(R.id.button)).setOnClickListener(
            new OnClickListener() {
                public void onClick(View v) {
                    startActivity(new Intent(FirstActivity.this, 
                        SecondActivity.class));
        }});
    }
}

public class SecondActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_2);
        ((Button)findViewById(R.id.button)).setOnClickListener( 
            new OnClickListener() {
                public void onClick(View v) {
                    // Method 1
                    int pid = android.os.Process.myPid();
                    android.os.Process.killProcess(pid);
                    // Method 2
                    System.exit(0);
        }});
    }
}

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

Ответы [ 4 ]

6 голосов
/ 07 мая 2011

Вы можете попробовать this.finish ()

Другие варианты убивают процесс, не сообщая об этом системе Android, которая предполагает, что что-то, что хотел сделать пользователь, потерпела крах и перезапускает его.

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

Также подумайте о том, что произойдет, если какое-либо другое действие выйдет на передний план без того, чтобы пользователь не вышел из вашего - например, что если они получат телефонный звонок?

2 голосов
/ 02 ноября 2012

Просто моя идея, после того, как вы запустите второе действие (эта строка),

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

Вы можете убить первое действие. Через

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);

Итак, первое занятие не пришло.

Другой способ,

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

Сначала убейте первый процесс активности, затем вы можете убить второй процесс активности.

Итак, первое занятие не пришло.

0 голосов
/ 19 июля 2013

System.exit (0);при использовании этого весь текущий процесс будет убит

0 голосов
/ 07 июля 2011

У меня была эта проблема, пока я новичок в Android. я создал два действия и переключился с одного макета на другой, но когда я завершу процесс второго действия, первое действие будет возобновить (); и первый макет будет показан на дисплее.

ответ на ваш вопрос: при первом возобновлении активности вы должны позвонить финишу (); метод включен в методе onResume ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...