Android: launchMode = SingleTask проблема - PullRequest
5 голосов
/ 16 мая 2011

У меня есть приложение, которое вращается вокруг основной деятельности (главное меню). В каждом другом приложении есть пункт меню параметров, который указывает на это действие.

Сначала я всегда начинал новый основной вид деятельности, когда был выбран этот элемент. Используя пакет намерений, я сказал основному действию, что некоторые инициализации, которые я делаю при новом запуске, не были необходимы.

Однако мне не совсем понравилось общее поведение. Я наткнулся на android:launchMode="SingleTask", и это, казалось, помогло: теперь я не воссоздаю свою активность в главном меню все время; также, если я нажимаю кнопку «назад», я возвращаюсь прямо на домашний экран. Это похоже на правильное «главное» меню.

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

Есть идеи, как мне реализовать поведение SingleTask, не возвращаясь только к одному виду деятельности?

Ответы [ 3 ]

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

Если ваши другие действия объявлены как обычные с активностями по умолчанию в Android, то возврат к вашему приложению должен привести вас к той же активности, на которой вы остановились (с помощью аппаратной кнопки home)

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

Чтобы вернуться к основному действию из любого действия, сделайте следующее:

public static void goHome(Context context) {
        final Intent intent = new Intent(context, HomeActivity.class); //give name of your main activity class here
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
    }

Это очистит стек занятий и вернет вас к основному занятию.Как вы объявили singleTop, он выведет существующее основное действие на первый план.Флаг Intent.FLAG_ACTIVITY_CLEAR_TOP удалит все действия в стеке поверх основного действия.(Я предполагаю, что вы находитесь в том же приложении).

Теперь все ваши другие действия должны включать только кнопку, чей прослушиватель кликов вызывает метод goHome();

Из вашего основного действия,если вы нажмете кнопку возврата оборудования, она должна выйти из вашего приложения.

0 голосов
/ 16 мая 2011

Я думаю, что вы должны сохранить состояние своей активности перед началом другой активности, а затем возобновлять свою активность всякий раз, когда вы возвращаетесь к последней активности. см. активность жизненного цикла с Android http://developer.android.com/guide/topics/fundamentals/activities.html

0 голосов
/ 16 мая 2011

Почему бы не вызывать финиш () для действий, которые были созданы основным действием? Таким образом, вы возвращаетесь к основному виду деятельности, не создавая новый ...

...