Это нормально для метода "activity.onCreate ()" вызываться несколько раз - PullRequest
14 голосов
/ 28 августа 2010

У меня есть код в методе onCreate a Activity, и я заметил, что он вызывается три раза.Это нормальное поведение?Спасибо.

Ответы [ 5 ]

25 голосов
/ 28 августа 2010

Возможно, вы захотите прочитать документацию по жизненному циклу Activity .

OnCreate будет вызываться только один раз для каждого периода действия. Тем не менее, существует ряд ситуаций, которые могут привести к тому, что ваша деятельность будет убита и восстановлена. Таким образом, onCreate будет вызываться снова.

Для правильной поддержки этого вы можете сохранить информацию о состоянии в onSaveInstanceState и восстановить ее из пакета состояний, который вы получаете при создании.

18 голосов
/ 06 марта 2014

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

Решение простое (хотя вам может не понравиться: p)

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash_screen);

        if(savedInstanceState == null){
            // everything else that doesn't update UI
        }
    }
1 голос
/ 26 сентября 2012

Вы также можете обрабатывать изменения конфигурации самостоятельно, установив в AndroidManifest следующий оператор в конфигурации действий:

android:configChanges="orientation|keyboardHidden"

Для получения дополнительной информации вы можете ознакомиться с официальной документацией

0 голосов
/ 11 ноября 2018

У меня была похожая проблема, она была вызвана MobileAds.После того, как я инициализировал их ДО super.onCreate(...) проблема исчезла.

0 голосов
/ 20 января 2013

Ниже приведен сценарий, с которым я столкнулся (и решил), который описывает поведение, которое вы описываете:

Существует 3 события, которые активируют OnTouch - 1. android.view.MotionEvent.ACTION_UP 2. android.view.MotionEvent.ACTION_DOWN 3. android.view.MotionEvent.ACTION_MOVE.

Часто все эти три события запускаются одновременно, вызывая прослушиватель OnTouch.Когда этот прослушиватель используется для запуска действия (через Intent, переданный startActivity ()), вы можете воспроизвести это поведение, которое будет вызывать OnCreate для Activity несколько раз (3 в этом примере).

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

...