Как убить процесс?
У меня есть два действия, первое запускается 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 ответа
Вы можете попробовать это. Финиш ()
Другие варианты убивают процесс, не сообщая об этом системе Android, которая предполагает, что что-то, что хотел сделать пользователь, потерпела крах и перезапускает его.
Но ваши предположения о закрытии действия, предотвращающего утечку данных, ошибочны. Если вы хотите предоставить кнопку выхода из системы, сделайте это и сделайте так, чтобы она отменяла все токены / ключи доступа, которые использовались для получения доступа.
Также подумайте о том, что произойдет, если какое-то другое действие выйдет на передний план без того, чтобы пользователь покинул ваш, например, что, если они получат телефонный звонок?
Просто моя идея, после того, как вы начнете второе действие (эта строка),
startActivity(new Intent(FirstActivity.this,SecondActivity.class));
Вы можете убить первое действие. Через,
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
Итак, первое занятие не пришло.
По-другому,
Вы можете получить идентификатор процесса первой операции и отправить идентификатор процесса второй деятельности через пакет.
Сначала убейте первый процесс активности, затем вы можете убить второй процесс активности.
Итак, первое занятие не пришло.
System.exit(0); при использовании этого весь текущий процесс будет убит
У меня была эта проблема, пока я новичок в Android. я создал два действия и переключился с одного макета на другой, но когда я завершу процесс второго действия, первое действие будет возобновить (); и первый макет будет показан на дисплее.
ответ на ваш вопрос: в первом резюме деятельности вы должны позвонить финиш (); метод включен в методе onResume().