2011-12-14 2 views
2

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

Чтобы решить эту проблему, 2 решения будет в порядке:

1) Не называйте конкретную деятельность, а просто попросить моего приложения, чтобы открыть (например, при нажатии на иконку приложения на главном экране: Open первое действие, если приложение было закрыто или просто принести приложение на передний план, если он был открыт (но был в фоновом режиме)).

2) Очистите весь стек активности и запустите конкретную операцию.

Но мне не удалось сделать одно из обоих решений. Даже используя флаг намерения (например, http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP).

Может ли кто-нибудь помочь мне решить эту проблему?

Благодаря

PS: Извините за мой плохой английский, я из Бельгии :-)

ответ

1

Это не то, что вы просили сделать, но вы можете добавить атрибут android:launchMode="singleTask" к действию, которое вы будете вызывать из этого уведомления, и оно не будет создавать новую активность, если один из этих экземпляров уже существует.

Возможно, вы также можете использовать ActivityManager.killBackgroundProcesses(String packageName), чтобы удалить фоновые процессы, но я никогда не пробовал это, и не рекомендуется или использовать предложение ChriZzZ и управлять своими действиями немного туже.

+0

android: launchMode = "singleTask", похоже, решает мою проблему. большое спасибо – ValentinTaleb

0

Похоже, вы ищете FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

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

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