Не может убить 2 действия одновременно. это почему? - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь убить 2 действия одним нажатием кнопки.Текущая активность и предыдущая активность.Используя свои пиды.Я просто могу убить одно занятие.Почему это происходит?

public void onClick(View v) {

                android.os.Process.killProcess(pidofmain);
                android.os.Process.killProcess(android.os.Process.myPid());

                }

Если я вижу в своем logcat, действие с pid "pidofmain" прекращается, а текущее действие не уничтожается.целое число, которое я получил от предыдущего действия, используя намерение.

Ответы [ 3 ]

0 голосов
/ 08 декабря 2011

Гораздо лучший способ сделать это - вызвать finish() для текущей деятельности. Вы также можете просигнализировать о завершении предыдущего действия, если оно вызывает текущее действие, используя startActivityForResult(Intent). Текущее действие вызовет setResult(int) перед вызовом finish(), чтобы отправить код возврата назад к предыдущему действию. Предыдущее действие может проверить код возврата в onActivityResult(int, int, Intent), а также вызвать finish() на основе кода результата.

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

0 голосов
/ 08 декабря 2011

Это не окончательный ответ, но больше похоже на некоторые мои мысли, но уже слишком поздно, чтобы я запустил Eclipse и создал их прототип. Если это не поможет, дайте мне знать, и я постараюсь рассмотреть это глубже завтра вечером.
Несколько мыслей (надеюсь, они помогут):
1) Приложения Android на самом деле являются однопоточными, и ваша основная деятельность контролирует все события отправки (включая события, которые, как я предполагаю, являются вторым созданным вами потоком). Если вы убьете основное действие, я почти уверен, что ваше приложение прекратит выполнение сразу же после вашего первого вызова на android.os.Process.killProcess(pidofmain), и вы никогда не дойдете до второго вызова, потому что вы убили бы все ваше приложение. Опять же, предполагается, что по имени переменной pidofmain вы убиваете основной поток пользовательского интерфейса, а не просто действие, называемое main.
2) Мне немного любопытно также, откуда у вас pidofmain? Похоже, что у вас всего три действия, и в первом упражнении вы получаете идентификатор процесса и отправляете его второму действию в наборе намерений, которое также передается третьему действию (в котором вы пытаетесь убить все это)? Если это так, и вы пытаетесь убить текущее действие, таблица в документации, приведенной здесь, заставляет меня поверить, что вы не можете просто убить действие, которое находится в возобновленном состоянии, с помощью того же метода. Официальные Документы Android для Активности Возможно, вы захотите попробовать вызвать метод finish () для вашей текущей активности.

Что именно вы видите в logcat? А что происходит в пользовательском интерфейсе? Продолжается ли видимое действие, но другое действие было удалено из backstack?

0 голосов
/ 08 декабря 2011

Оставить процесс убийства в ОС. Это плохо для любой программы в ОС с разделением времени. Если вы хотите сохранить память или что-то в этом роде, позвольте ОС справиться с этим. Кроме того, вы не можете точно знать, был ли процесс правильно убит, потому что хорошо, если это так, вы бы не знали, а если нет, вы не должны были это делать. Для чего вы хотите это сделать?

...