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

Как я могу узнать, что 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
   }

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

4b9b3361

Ответ 2

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

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.

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

Ответ 3

Итак, как в моем комментарии:

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
    }
}

Ответ 4

Как показано в Activity - Документация для Android.

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

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

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

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

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

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

enter image description here

В вашей деятельности могут быть заинтересованы три ключевые петли:

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

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

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

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

Ответ 5

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

Ответ 6

Я вещь @сури прав. но если хотите быть более понятными с помощью 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 <<<<<<<<<");

    }

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

Ответ 7

Это может помочь другим новичкам:

private boolean isOnCreateCalled = false;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
         Log.i("MyTag" , "onCreate called");
         isOnCreateCalled = true;
    }
}

@Override
protected void onResume() {
    super.onResume();
    Log.i("MyTag" , "onResume called");
    if (isOnCreateCalled) {
        isOnCreateCalled = false;
        Log.i("MyTag" , "onResume condition called once");
        // Your codes here...
    }
}

Смотрите результат в Logcat !