Android:Восстановление активной активности при возобновлении работы приложения

StackOverflow https://stackoverflow.com/questions/724419

  •  05-09-2019
  •  | 
  •  

Вопрос

У меня запущены два мероприятия: Основная активность и Дочерняя активность.Всякий раз, когда пользователь нажимает на кнопку в Основная активность, тот Дочерняя активность запускается.То, что я хочу сделать, это:

Когда активная деятельность является Дочерняя активность и пользователь нажимает кнопку "Домой", затем перезапускает приложение, Я хочу увидеть Дочерняя активность вместо того , чтобы Основная активность то есть запущен.

У меня было несколько предложений, которые действительно можно обойти.Я пытался манипулировать событиями OnStart, onRestart, onResume, onStop, onDestroy.Но они не полностью решили проблему.Там должен быть какой-то разумный выход.Спасибо.

Редактировать:

Спасибо тебе за ответ, Сонил.Случай, о котором вы сказали, происходит, когда действие вызывается из окна "Последние действия".(окно открывается при длительном нажатии кнопки "Домой") Однако;Этого не происходит, когда вы открываете его с главного экрана.(например, открытие с начала) Я не думаю, что в моем коде есть конкретная проблема, вызывающая эту ошибку.Потому что я создал тестовый проект и попробовал автономный, прежде чем отправлять вопрос, и столкнулся с той же проблемой.Во всяком случае, вот тестовый код:

public class MainActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.setTitle("MainActivity");

        ((Button) findViewById(R.id.btnChildActivity)).setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        startActivity(new Intent(this, ChildActivity.class));
    }

}

public class ChildActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        this.setTitle("ChildActivity");

    }
}
Это было полезно?

Решение

Редактировать:Сегодня вы нашли решение своей проблемы несколько случайно!Видишь это отчет об ошибке.Это точно объясняет вашу проблему.Причина, по которой я не смог воспроизвести проблему, заключается в том, что у меня никогда не было Eclipse, запускающего приложение напрямую.Я использую Eclipse для установки приложения, а затем запускаю его сам.


Это уже поведение по умолчанию для приложений Android, для достижения этого никаких специальных ухищрений не требуется.Я удивлен, что ваше приложение не демонстрирует такого поведения.Каждое приложение для Android поддерживает стек действий, буквально стек действий LIFO.Эти действия могут быть дополнительно сгруппированы в задачи, но, по моему опыту, 99% обычных приложений никогда не должны ничего знать о задачах.

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

Если ваше приложение не демонстрирует такого поведения, я подозреваю, что это как-то связано с тем, как вы запускаете MainActivity и ChildActivity, а также с любыми дополнительными флагами намерений, которые вы можете использовать.Есть ли шанс, что вы сможете опубликовать фрагменты кода о том, как вы запускаете MainActivity и ChildActivity?

Другие советы

Я вернулся и протестировал с аналогичным приложением, и даже когда процесс вытесняется из памяти, ChildActivity восстанавливается автоматически, как говорит Soonil.Вы видите это на эмуляторе или на реальном устройстве?

Если вы запустите свое приложение и посмотрите logcat, вы должны увидеть что-то вроде следующего после запуска вашего приложения, затем откройте дочернее действие и нажмите Home, а затем снова запустите свое действие:

Начальная активность:Намерение { действие=android.intent.action.ОСНОВНЫЕ категории={android.intent.categroy.ЛАУНЧЕР} флаги=...comp={com.yourpackagename.MainActivity} } Запустите процедуру для действия yourpackagename.Дочерняя активность:pid=x uid=y gids={} Отображаемая активность /.Дочерняя активность

Не могли бы вы опубликовать выходные данные logcat, когда вы не видите ожидаемого поведения?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top