1

Я переопределены методы onStart(), onResume(), onStop(), onPause() в MainActivity. Я использую команду log.d() для мониторинга при вызове этих методов.Почему методы жизненного цикла activtity не вызывается, когда андроид: configChanges = «ориентация | Размер экрана» в файле манифеста

Когда я использую android:configChanges="orientation|screenSize" в манифесте, мои переопределенные методы не вызываются. Почему это происходит?

ответ

1

Это потому, что android:configChanges="orientation|screenSize" в манифесте инструктирует не воссоздавать активность при изменении ориентации или размера экрана.

Вы можете переопределить метод вашей деятельности, если вам нужно что-то сделать с изменениями ориентации.

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
} 

Если вы хотите перезапустить деятельность по ориентации и размера экрана изменений, вы должны удалить android:configChanges="orientation|screenSize" из манифеста.


Отрывок из manifest activity element

android:configChanges 

конфигурации список изменений, что активность будет обрабатывать себя. Когда во время выполнения происходит изменение конфигурации, активность отключается и перезапускается по умолчанию, но объявление конфигурации с этим атрибутом предотвратит перезапуск активности. Вместо этого действие остается запущенным и вызывается его метод .

2

Существует два способа обработки изменений времени выполнения.

1. Retain an object during a configuration change 
2. Handle the configuration change yourself 

1. Сохранить объект во время изменения конфигурации

Если сохранить объект при изменении конфигурации Android перезапускает идущую активность и onDestroy() называется, а затем onCreate() и оттуда всех остальных: onStart(), onResume(), onStop(), onPause() и т.д.

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

2. Ручка изменения конфигурации самостоятельно

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

Это происходит, когда вы включаете в свой манифест android:configChanges атрибут со значением, представляющим конфигурацию, которую вы хотите обработать.

Например:

<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name"> 

Теперь, когда одна из этих конфигураций меняются, MyActivity не рестарт. Вместо этого MyActivity получает вызов onConfigurationChanged(). Этот метод передается конфигурация объекта, который определяет новую конфигурации устройства

Например, следующий onConfigurationChanged() реализации проверяет ориентацию текущего устройства:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

Для получения дополнительной информации Вы можете продолжить в Android Developers

 Смежные вопросы

  • Нет связанных вопросов^_^