Активность Android с перезапуском заставки и загадкой кнопки возврата - PullRequest
3 голосов
/ 08 ноября 2010

У меня есть приложение Android с заставкой.

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

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

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

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

Итак, я говорю, что все в порядке ... активность экрана-заставки - это после всего действия запуска / основного. Теперь, настоящая тайна, которая у меня есть, заключается в следующем.

Когда я нажимаю кнопку "Назад" на этом недавно загруженном заставке, мне будет представлен подактив, из которого я оставил приложение до его уничтожения. Я действительно не понимаю этого. Очевидно, Android DID сохранял состояние подоперации (и его стек истории) для перезагрузки, но вместо перезагрузки он решил вместо этого запустить заставку, с этим подэтапом (я оставил задачу раньше, чем она была убита) на шаг назад стек активности.

Почему это происходит?

Когда процесс не прерван, я могу вернуться туда, где я остановился. Когда он будет убит, я не смогу (но все же восстановить прежнюю историю этого приложения). Я знаю, что в последнем случае Android должен загружать состояние и т. Д., Но это не должно быть проблемой и выполняется автоматически по умолчанию (согласно документации).

P.S. Я не делаю ничего особенного. Флаги запуска по умолчанию, нет перезаписанных методов восстановления состояния и т. Д.

Ответы [ 2 ]

2 голосов
/ 02 июня 2012

Эй, попробуй, это работает, мне нужно взять один логический флаг, чтобы он справился с этой проблемой, и когда ты нажмешь кнопку «Назад» во время загрузки заставки, он остановит это действие, поэтому проблема с автоматической перезагрузкой решит надежду, что это полезно вы.

public class Main extends Activity {

    ImageView imageLogo;
    LinearLayout myLayout;
    private Thread splashTread;
    private boolean isBackPressed = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        splashTread = new Thread() {
            public void run() {
                try {
                    sleep(3000);
                    if (!isBackPressed) {

                        Intent myIntent = new Intent(
                                "src.SplashScreen.com.MENU");
                        startActivity(myIntent);

                    }

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                finally {

                    finish();

                }
            }

        };

        splashTread.start();

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            isBackPressed = true;
            finish();
        }
        return super.onKeyDown(keyCode, event);

    }

}
0 голосов
/ 08 ноября 2010

Это известная проблема Android с двумя экземплярами приложения.Эта проблема была официально отслежена здесь и здесь .

Обходной путь здесь .

...