2013-09-14 3 views
1

У меня есть раздражающая проблема с стеком активности, для которого я не нашел решение.Как предотвратить многократное отображение активности при повторном запуске приложения?

В основном у меня есть деятельность, которая действует как «стартовая» активность (основная деятельность в моем манифесте, это начинается с запуска и т. Д.). Это полупрозрачный, устанавливается с помощью:

андроид: тема = «@ андроид: стиль/Theme.Translucent.NoTitleBar»

Что она делает это проверить Intent, который подается к нему. Если данные намерения пустые, в нем начинается новое действие, которое является основным видом деятельности для приложения.

Если данные о намерениях содержат определенные команды, то действие стартера должно выполнять определенные задачи, а затем выйти, даже не запуская основное действие. Таким образом, это должно произойти без какого-либо пользовательского интерфейса (за исключением всплывающего сообщения, когда это делается).

Моя проблема заключается в том, что если основное действие было запущено, если пользователь использует кнопку «домой», чтобы оставить его, то при следующем запуске стартовой операции с помощью команды основное действие также проявится кратковременно.

Я предполагаю, что это из-за стека активности, так как я не перезапускаю основное действие из активности стартера в этом случае.

Я пробовал различные решения безрезультатно. Я не могу использовать финиш() в основном действии в onPause или onStop, так как это также завершает действие, если пользователь, например, входит в активность настроек и не хочет поведения. Я также попробовал варианты повторного запуска активности стартера с помощью

intent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

, но это, похоже, не работает.

Странно то, что когда это нежелательное поведение происходит, onCreate/onResume/onStart не призвал к основной деятельности. Все еще это показывает! Я предполагаю, что это связано с тем, что оно сложено, и поскольку операция запуска является полупрозрачной, через нее отображается основная деятельность.

+0

Сейчас я прибегал к отслеживанию, когда пользователь покидает основной. Если он оставит его для запуска другого действия в приложении, я ничего не делаю. Если он оставит его по какой-то другой причине (например, домашний пресс), я завершу работу. Это работает, но если у кого-то есть лучшее предложение, пожалуйста, дайте мне знать. – Owtroid

ответ

0

Включить атрибут вашей деятельности android:noHistory в манифесте:

<activity 
    ... 
    android:noHistory="true"> 
    ... 
</activity> 

Это позволит установить активность удалить из стека деятельности, когда он приступает к выполнению следующей деятельности. Пользователь не сможет вернуться к активности, которая имеет android:noHistory="true".

См:

+0

Спасибо, но это вызовет те же проблемы, что и при использовании finish(). Основной вид активности может порождать активность предпочтений, а также другую активность, и пользователь должен иметь возможность вернуться к основному виду деятельности при выходе из этих действий ... – Owtroid

+0

Я немного не уверен в желаемом потоке активности. Это «стартер» -> «главный» -> «some_other_one»?А изредка «some_other_one» снова запустит главную страницу? – matthewrdev

+0

Это стартер-> главное -> (иногда) some_other_one, где some_other_one может быть активностью предпочтений. И от some_other_one должно быть возможно вернуться к основному. Он также может быть просто «стартером» в зависимости от намерения, и в этом я вижу проблему с «основным», также показывающим. На данный момент я прибегал к отслеживанию, когда пользователь покидает главную. Если он оставит его для запуска другого действия в приложении, я ничего не делаю. Если он оставит его по какой-то другой причине (например, домашний пресс), я завершу работу. – Owtroid

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