Intereting Posts

Как я могу узнать, что OnResume приходит после onCreate?

У меня мало действий, и из одного занятия открываю другое, и я возвращаюсь к первому …

Дело в том, что onCreate называется one, и onResume каждый раз, когда активность отображается. Например, когда я закрываю B, который ранее был запущен с A, вызывается onResume, но не onCreate ….

Моя проблема в том, что я не хочу запускать onResume, если он появился после onCreate, я хочу запустить код, только если onCreate не был вызван

Можно ли сделать БЕЗ статического флага?

Есть ли какой-нибудь метод или флаг от android, например comeAfterOnCreate?

@Override protected void onResume() { if(comesAfterOnCreate){ //DO not run this code }else{ //run the long task } 

Я показываю много ответов с помощью решения с использованием статического флага. Спасибо всем вам за усилия и предлагаю помощь, но мне было интересно, есть ли какой-то метод или что-то еще …

Solutions Collecting From Web of "Как я могу узнать, что OnResume приходит после onCreate?"

Это не сложная задача, вы можете использовать boolean или увидеть здесь. Возможно ли, чтобы это было onCreate, вызванное изменением ориентации?

Попробуй это,

 boolean flag = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); flag = true; .... } @Override protected void onResume() { super.onResume(); if(flag == true){ ..... // it has came from onCreate() } else{ .....// it has directly came to onResume() } } 

Теперь, когда Acitive закончит, значение флага снова будет false, а onResume() будет вызываться со значением false.

Надеюсь, что это работает для вас.

Так как в моем комментарии:

 private boolean onCreateRunned = false; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); onCreateRunned = true; //More code } @Override public void onResume(){ super.onResume(); if(onCreateRunned){ onCreateRunned = false; //important, or it will run only once. // Do your code } } 

Как показано в Activity – Android Documentation .

Активность имеет в основном четыре состояния:

1. Если активность на переднем плане экрана (вверху стека) активна или работает.

2. Если активность потеряла фокус, но все еще видна (то есть, новая не полноразмерная или прозрачная деятельность фокусируется на вашей деятельности), она приостанавливается. Приостановленная активность полностью живая (она поддерживает всю информацию о состоянии и членах и остается прикрепленной к диспетчеру окон), но может быть убита системой в ситуациях с крайне низкой памятью.

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

4. Если действие приостановлено или остановлено, система может отбросить активность из памяти, попросив ее закончить или просто убить ее процесс. Когда он снова отображается пользователю, он должен быть полностью перезапущен и восстановлен до прежнего состояния.

Вот жизненный цикл активности, как показано в документации на Android:

Введите описание изображения здесь

Вы можете быть заинтересованы в мониторинге в вашей деятельности:

1. Весь жизненный цикл активности происходит между первым вызовом onCreate (Bundle) до одного окончательного вызова onDestroy (). Активность будет выполнять всю настройку «глобального» состояния в onCreate () и освободить все оставшиеся ресурсы в onDestroy (). Например, если у него есть поток, выполняющийся в фоновом режиме для загрузки данных из сети, он может создать этот поток в onCreate (), а затем остановить поток в onDestroy ().

2. Видимое время жизни активности происходит между вызовом onStart () до соответствующего вызова onStop (). В течение этого времени пользователь может видеть активность на экране, хотя он не может быть на переднем плане и взаимодействовать с пользователем. Между этими двумя методами вы можете поддерживать ресурсы, необходимые для отображения активности для пользователя. Например, вы можете зарегистрировать BroadcastReceiver в onStart (), чтобы отслеживать изменения, влияющие на ваш пользовательский интерфейс, и отменить регистрацию в onStop (), когда пользователь больше не видит, что вы показываете. Методы onStart () и onStop () можно вызывать несколько раз, так как активность становится видимой и скрытой для пользователя.

3. Срок действия события переднего плана происходит между вызовом onResume () до соответствующего вызова onPause (). За это время активность перед всеми другими действиями и взаимодействием с пользователем. Активность может часто проходить между возобновленными и приостановленными состояниями – например, когда устройство переходит в спящий режим, когда доставляется результат активности, когда новое намерение передается, поэтому код в этих методах должен быть достаточно легким.

Вывод: вы не можете изменить порядок выполнения жизненного цикла.

Попробуйте включить тосты в OnCreate и OnResume и проверьте, есть ли тост «onResume», когда вы запускаете приложение перед тостом OnCreate. Или распечатайте сообщение журнала из соответствующих методов

Я вещь @сури прав. Но если хотите быть более ясными с onCreate() и onResume()

Затем положить

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println(">>>>>> This is oncreate method"); .... } @Override protected void onResume() { super.onResume(); System.out.println("This is onResume method <<<<<<<<<"); } 

Это проще всего проверить ваш вопрос.