Android: выполнение кода, когда приложение "активировано", а не при изменении ориентации
В моем приложении (minSdkVersion
17, но я гибок в этом отношении), у меня есть один вид деятельности. Отображает какое-то расписание. Я хочу, чтобы он показывал текущий день и выделил точное время. Эта функциональность уже работает отлично.
Я хочу делать это каждый раз, когда приложение запускается, или каждый раз, когда приложение снова становится активным (например, после нажатия кнопки "Домой" и повторного нажатия на значок приложения, не убивая приложение между ними).
Но я НЕ хочу этого делать, когда устройство поворачивается.
Например, у меня есть метод:
private void scrollToNow() {
// do the calculation and scroll all views to the correct position
// this is code I already have fully functional!
}
И я хочу выполнять его каждый раз, когда активность снова становится активной, но НЕ при смене ориентации.
Я перепробовал много комбинаций (в onStart
, onResume
, onCreate
), но никто из них не сделал этого. Я пытался создать решение, используя saveInstanceState, но не получилось.
У кого-нибудь есть советы или полезные ссылки для меня?
Большое спасибо,
Оливер
2 ответа
Пожалуйста, подумайте дважды, прежде чем вы решите проверить изменения конфигурации вручную.
Если вашему приложению не требуется обновлять ресурсы во время определенного изменения конфигурации, и у вас есть ограничение производительности, которое требует от вас перезапуска активности, тогда вы можете объявить, что ваша активность обрабатывает само изменение конфигурации, что предотвращает перезапуск системы деятельность.
Примечание. Обработка изменений конфигурации самостоятельно может значительно усложнить использование альтернативных ресурсов, поскольку система не применяет их автоматически для вас. Этот метод следует рассматривать как последнее средство, когда необходимо избегать перезапусков из-за изменения конфигурации, и он не рекомендуется для большинства приложений.
Попробуйте сохранить флаг в onSaveInstanceState
и в onCreate проверьте, есть ли saveInstanceState, затем сохраните его как поле, например. Это даст вам информацию о том, является ли действие "воссозданным" или нет. Затем в проверке onResume этот флаг установлен или нет. Если нет, то вы не "воссоздали" свою деятельность, поэтому вы можете вызвать scrollToNow()
Я не хочу воссоздавать макет при изменении ориентации экрана
Вы пытались добавить эту строку в свой AndroidManifest.xml
android:configChanges="screenLayout|screenSize|orientation"
как это:
<activity
android:name="youractivity"
android:configChanges="screenLayout|screenSize|orientation"
android:label="@string/title_activity_create_note"
android:theme="@style/AppTheme"
android:windowSoftInputMode="stateAlwaysHidden" />
Для получения дополнительной информации вы можете взглянуть на: manifest / activity-element на этой странице, перейти в раздел android:configChanges и прочитать, пожалуйста.
При добавлении этого вы должны обрабатывать onConfigurationChanged()
метод самостоятельно вместо системы Android.
Пожалуйста, внимательно прочитайте раздел примечаний на этой странице:
Примечание. Следует избегать использования этого атрибута и использовать его только в качестве крайней меры. Пожалуйста, прочитайте Обработка изменений времени выполнения для получения дополнительной информации о том, как правильно обрабатывать перезапуск из-за изменения конфигурации.
Также я использую это в моем приложении, может быть, вы тоже можете попробовать это: android:screenOrientation="nosensor"
на этой странице вы также можете найти информацию об этом.