Как заставить приложение Android вернуться к последнему открытому действию при перезапуске? - PullRequest
38 голосов
/ 14 марта 2010

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

Ответы [ 3 ]

49 голосов
/ 14 марта 2010

При запуске с помощью значка на главном экране Android всегда запускает действие с фильтром android.intent.action.MAIN в вашем AndroidManifest.xml, если только приложение не запущено (в этом случае оно, очевидно, восстановит действие поверх стек).

Для достижения того, что вы описали, вы можете просто сохранить последнее видимое действие в SharedPreferences и иметь действие Диспетчер , которое запускает последнее действие в соответствии с предпочтениями.

Таким образом, в каждом упражнении вы хотите автоматически перезапустить:

@Override
protected void onPause() {
    super.onPause();

    SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
    Editor editor = prefs.edit();
    editor.putString("lastActivity", getClass().getName());
    editor.commit();
}

А Диспетчер активность похожа на следующую:

public class Dispatcher extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Class<?> activityClass;

        try {
            SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
            activityClass = Class.forName(
                prefs.getString("lastActivity", Activity1.class.getName()));
        } catch(ClassNotFoundException ex) {
            activityClass = Activity1.class;
        }

        startActivity(new Intent(this, activityClass));
    }
}

Примечания

  • Вы можете создать базовый класс для onPause переопределения
  • Действие Диспетчер , очевидно, должно быть действием android.intent.action.MAIN
6 голосов
/ 21 августа 2014

Это не так сложно. Вам просто нужно манипулировать манифестом.

AndroidManifest.xm

<activity
     android:name=".MainActivity"
     android:alwaysRetainTaskState="true"
     android:exported="true"
     .
     .
     .

Прочтите об 'android: exported' & 'android: alwaysRetainTaskState' здесь:

андроид: экспортироваться

андроид: alwaysRetainTaskState

4 голосов
/ 14 марта 2010

Это является поведением по умолчанию, и этот вопрос задавался несколько раз ранее: Android: сохранение стека активности задачи после перезапуска из HOME
Android Запуск приложения из последней активности

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

Однако, поскольку это поведение было исправлено в 0.9.6 версии плагина ADT для Eclipse в последние несколько недель, вам больше не нужен этот обходной путь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...