Я боролся с этим странным поведением более месяца, но я наконец-то нашел объяснение методом проб и ошибок.
Такое поведение происходит, когда вы запускаете свое приложение из Eclipse, из командной строки или еслиВы устанавливаете приложение и нажимаете кнопку «Открыть» (вместо кнопки «Готово»), чтобы запустить приложение сразу после его установки.
Если в одном из этих случаев вы запускаете приложение, перейдите к Activity1, а затемв Занятие 2, нажмите кнопку HOME, а затем нажмите значок приложения, откроется новый экземпляр Занятия1.Не верь мне на слово.Просто нажмите НАЗАД и увидите, что он возвращает вас к вашей Activity2, которую вы оставили, когда нажимали HOME.
Кажется, что активность запуска не помещается в стек активности, если приложение запускается одним из упомянутых способов.выше, именно поэтому он создает новый экземпляр действия средства запуска поверх текущих действий в стеке приложения.Это выглядит для меня как ошибка.
Таким образом, обходной путь должен состоять в том, чтобы выйти из приложения, при первом запуске его из Eclipse или из командной строки, или кнопки Open и т. Д., Нажав кнопку BACK столько разпри необходимости, а затем снова введите приложение.С этого момента поведение будет таким, как ожидалось.
РЕДАКТИРОВАТЬ: лучший обходной путь будет следующим: Создайте DummyActivity и установите его в качестве основной точки входа в приложение.Также добавьте флаг android:noHistory="true"
.DummyActivity
прост и будет выглядеть так:
открытый класс DummyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!MyApplication.startedApp) {
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
}
finish();
} }
MyApplication
- это класс, расширяющий android.app.Application и определяется внутри AndroidManifest.xml.В HomeActivity.class
вы устанавливаете внутри метода onCreate()
логическое поле startedApp
в значение true.Если пользователь нажимает кнопку BACK с экрана, вам нужно переместить значение для startApp в значение false.
открытый класс HomeActivity расширяет Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.startedApp = true;
}
@Override
public void onBackPressed() {
MacawApplication.startedApp = false;
super.onBackPressed();
}
}
Итак,при первом запуске приложение входит в блок if и запускает первую реальную активность в нашем приложении.Если вы перемещаетесь по приложению, затем нажмите HOME, а затем снова запустите приложение, DummyActivity
будет вызван во второй раз, и он просто вызовет finish()
для себя, и приложение покажет последнюю активность перед тем, как вы нажали HOME.