2015-05-02 3 views
-1

Моя проблема: я не могу найти способ перезапустить свою деятельность от себя. Например, в игре, если вы умрете, есть меню с возможностью повторного запуска, которые немедленно перезапускают сцену. Это точно так.Попытка перезагрузить Android-активность сама по себе не работает

Как я прочитал от многих других ответов на этот вопрос, существует 2 основных метода перезагрузки активность:

1- finish(); startActivity(getIntent());

2- recreate();

Первый метод Безразлично Кажется, я работаю для меня, потому что он перезапускает активность, но оставьте предыдущую созданную, открытую на задней панели моего стека. Похоже, что инструкция finish() не выполняет свои действия. Я попытался поставить его вперед, после, и всевозможные способы, но он никогда не закрывает деятельность, оставленную позади.

С другой стороны, номер опции 2 не может быть вызван (насколько я знаю) из-за потока пользовательского интерфейса, и если это произойдет, приложение завершится с ошибкой. Я попытался вызвать метод recreate, используя:

Activity.this.runOnUiThread(new Runnable() { 
     public void run() { 
      recreate(); 
     } 
    }); 

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

ответ

2

Попробуйте это:

Intent intent = getActivity().getIntent(); 
    getActivity().finish(); 
    startActivity(intent); 
+0

Благодарим вас за ответ. Это работает для меня, но активность не закрывается. Он продолжает добавлять все больше дубликатов активности в стек. – Gerardpp

+0

Редактировать вопрос и написать свой код – aldakur

+0

Похоже, ответ aldakur был более ясным для моих нужд. Я просто добавил немного лишней строки кода в свой манифест, чтобы убедиться, что система не принимает больше экземпляров этого конкретного действия, используя: 'android: launchMode =" singleInstance "'. – Gerardpp

1

Вы должны добавить FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK флаги намерения, такие как:

Intent intent = getActivity().getIntent(); 
intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK); 
getActivity().finish(); 
startActivity(intent); 

Это заставит систему, чтобы удалить предыдущую задачу из стека.

Смежные вопросы