Подтвердить что ты не робот

Как заставить приложение Android вернуться к последнему открытому действию при перезапуске?

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

4b9b3361

Ответ 1

При запуске с помощью значка на главном экране 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 action

Ответ 2

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

AndroidManifest.xm

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

Прочитайте о "android: exported" и "android: alwaysRetainTaskState" здесь:

android: экспортировано

android: alwaysRetainTaskState

Ответ 3

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

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

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

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