Как завершить () каждое действие в стеке, связанное с приложением? - PullRequest
0 голосов
/ 09 мая 2011

Есть ли способ сказать Android: «Если пользователь выходит из этого действия, нажимая клавишу« home », немедленно завершает () каждое действие в стеке, которое когда-либо было связано с этим приложением?» Или, в качестве альтернативы, способ для Activity, чей метод onPause () был принудительно вызван пользователем, нажав "home", чтобы завершить () не только себя, но и Activity, которая также запустила его?

У меня проблема с рабочим процессом. Пользователи моего приложения в основном переключаются между основным окном «Активность» и «подробно». Они видят что-то в основной Деятельности, нажимают на нее, дочерняя деталь «Активность» порождается, они используют это некоторое время, а затем наносят ответный удар, чтобы вернуться к основной Деятельности. Я не могу завершить () основное действие после запуска дочернего действия, потому что тогда кнопка «Назад» перестала бы работать. Проблема заключается в том, что теперь, если пользователь завершает работу, нажимая клавишу home в дочернем Activity, он оставляет за собой родительское Activity зомби. Если пользователь перезапускает приложение, использует его какое-то время, а затем явно запускает выключение, нажимая меню-> выход из основного действия (где я убиваю службу, затем вызываю финиш ()), действие исчезает, и пользователь сбрасывается в активность зомби с предыдущего запуска (который быстро падает, если пользователь пытается что-то сделать, потому что фоновая служба, от которой он зависит, уже была закрыта, а все BroadcastReceivers, которые в противном случае прослушивали, были удалены, поэтому его крики о помощи не слышны).

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

Ответы [ 2 ]

3 голосов
/ 09 мая 2011

Самый простой способ сделать это:

Intent i =new Intent(CurrentClass.this,HomeClass.class);

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(i);
1 голос
/ 09 мая 2011

Возможно, вы можете пометить все действия в стеке с помощью clearTaskOnLaunch (см. http://developer.android.com/guide/topics/manifest/activity-element.html#clear).You, чтобы пометить все действия, которые будут в задаче, с помощью атрибута.

...