2011-05-05 4 views
4

Я думаю, что я только что нашел действительно странную ошибку ... но это может быть просто somekind из функции, что я никогда не слышал ..Android: FLAG_ACTIVITY_CLEAR_TOP и Android: launchMode = «SingleInstance»

В моем приложении если у меня есть какая-либо активность на AndroidManifest с андроида: launchMode = «SingleInstance», когда вы пытаетесь «чистые» стек до определенной точки, с помощью следующего кода:

Intent intent = new Intent(this, Xpto.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP 
      | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 

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

Пример:

А -> В -> С

Тогда из С Слово А с Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP, имеющий одно значение в манифесте. Он идет к A, но он только выводит его на передний план .. и не заканчивает C и B.

Может ли кто-нибудь объяснить это поведение?

Класс Xpto, который я вызываю, является в то время корневой активностью стека.

Благодаря

ответ

3

из читающих эту тему:

http://groups.google.com/group/android-developers/browse_thread/thread/5eb400434e2c35f4

, кажется, что:

«запущенного экземпляра деятельности B в приведенном выше примере будет либо получить новое намерение вы начинаете здесь в методе onNewIntent() или сами закончите и перезапустите с новым намерением. Если он имеет объявила, что его режим запуска «несколько» (по умолчанию), и у вас есть , не установлен FLAG_ACTIVITY_SINGLE_TOP в том же намерении, то он будет закончен и заново создан; для всех других режимов запуска или если установлено значение FLAG_ACTIVITY_SINGLE_TOP, этот Intent будет доставлен в текущему экземпляру onNewIntent(). "

, что означает, что вам нужно установить launchMode к множественным, например, и использовать только FLAG_ACTIVITY_CLEAR_TOP.

Intent intent = new Intent(this, Xpto.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 

В сценарии вы описали, B Activity и C не закончена, когда вы начинаете деятельность А (является корневой активностью). В документации описано, что с режимом запуска singleInstance и установленным флагом FLAG_ACTIVITY_SINGLE_TOP действия B и C НЕ будут завершены. Если вы хотите завершить действия B и C, то вы должны установить режим запуска на несколько экземпляр и НЕ установлен флаг FLAG_ACTIVITY_SINGLE_TOP.

+0

Прочтите мой вопрос еще раз. не дали ему ответа. – neteinstein

+0

Я считаю, что вы просите объяснить, почему в описанном вами сценарии действия B и C не завершены, когда вы начинаете активность A (которая является корневой активностью). То, что я пытался объяснить, возможно, плохо, заключается в том, что в документации описано, что при запуске режима singleInstance и установлен флаг FLAG_ACTIVITY_SINGLE_TOP, действия B и C НЕ будут завершены. Если вы хотите завершить действия B и C, вы должны установить режим запуска для нескольких экземпляров и НЕ установить флаг FLAG_ACTIVITY_SINGLE_TOP. Надеюсь это поможет. – groffhibbitz

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