2014-11-06 3 views
1

В моем приложении Activity1 запускает Activity2 с помощью «startActivityForResult()».finish() в приложении закрывает приложение, а затем показывает предыдущее приложение.

Когда деятельности2 делается, следующий код называется:

Activity2.java

private void finishActivity(final boolean accepted) 
{ 
    Intent returnIntent = new Intent(); 

    setResult(accepted ? RESULT_OK : RESULT_CANCELED, returnIntent); 

    finish(); 
} 

Activity1 принимает этот обратный вызов, и если результат не RESULT_OK, он также заканчивается.

Activity1.java

@Override 

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == Globals.REQUEST_CODE_TOS) 
    { 
    if (resultCode != RESULT_OK) 
     finish(); 
    } 
} 

После Activity1 заканчивает приложение закрывается, как и ожидалось.

ПРОБЛЕМА -

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

В багтрекер Android я вижу подобную ошибку, перечисленных в случае, когда нажата кнопка назад, что я считаю, это то же самое, как вызов отделки():

https://code.google.com/p/android/issues/detail?id=71067

Я видя это на Nexus 5, работая 4.4.4.

Это просто ошибка? Или есть какие-то обходные пути для поведения?

EDIT -

Чтобы выяснить поведение я пожелаю:

В Google Maps, если вы откажетесь от TOS всплывающего окна, приложение закрывается, и вы идете прямо на главном экране. У какого-либо ранее открытого приложения нет неудобной вспышки.

+0

Возможно, ошибка системы ... – StoneBird

+0

«предыдущее приложение в стеке кратковременно запускается вперед, а затем закрывается!» Что такое «предыдущее приложение»? Вы имеете в виду Activity2? –

+0

@ MarcinS. Нет, я имею в виду предыдущее приложение - например, после вызова функции finish() в моей верхней активности, Play Store ненадолго появляется, а затем возвращается, наконец, доставляя меня на главный экран. – Alchete

ответ

0

Возможно, это пустое намерение, которое вы возвращаете через setResult(). Вы пробовали здесь null?

+0

Я просто попробовал - нуль делает то же самое, но спасибо за идею. Кажется, это ошибка ... – Alchete

2

Это, безусловно, та же проблема, что и one you linked in your question (я слежу за ним в течение нескольких месяцев, так как сам владею Nexus 5). Это было фактически fixed in the AOSP, но это конкретное исправление, похоже, еще не нашло своего пути в N5. У меня пальцы скрещены для исправления в Lollipop, но мы увидим, когда это выйдет.

Что касается обходного пути, я не думаю, что в данный момент существует какой-либо существующий, хотя, если я ошибаюсь, мне бы хотелось узнать - я сам работаю над приложением, которое делает что-то подобное (вручную вызывает finish() нижний - почти активность в стеке при закрытии с помощью кнопки «Назад»).

+0

Да, я вижу то же самое, но Google Maps, похоже, избегает этой ошибки. Вы можете протестировать, очистив данные на Картах Google, а затем запустив - затем снимите TOS. Карты закрываются чисто и просто идут на рабочий стол. – Alchete

+0

Так оно и есть. Мне интересно, может ли они имитировать нажатие кнопки дома, а не называть 'finish()'. Я видел проблеск регулярной активности карты под TOS, поэтому, возможно, они сделали это, чтобы обойти, чтобы закончить все действия в стеке. – Alex

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