У меня похожая проблема.Если быстро повернуть устройство на 180 градусов, то onConfigurationChanged () не вызывается.Также, если вы удалите android: configChanges = "direction" и быстро поверните, то не вызывайте onCreate ().
Log, медленное вращение:
01-14 03:03:23.401: D/WindowManager(27840): [rotationForOrientationLw] return curRotation: curRotation 0
01-14 03:03:23.401: I/WindowManager(27840): Setting rotation to 0, animFlags=0
01-14 03:03:23.401: I/ActivityManager(27840): Config changed: { scale=1.0 imsi=257/4 loc=ru_RU touch=3 keys=1/1/2 nav=3/1 orien=2 layout=35 uiMode=17 seq=1163}
01-14 03:03:23.411: D/TestActivity(30737): onConfigurationChanged
01-14 03:03:23.411: D/TestActivity(30737): getRotation:newOrientation = 0
01-14 03:03:23.431: D/PinyinIME(27909): onStartInput ccontentType: 0 Restarting:true
01-14 03:03:23.451: W/com.skype.raider.MainApp(28091): onConfigurationChanged changed:{ scale=1.0 imsi=257/4 loc=ru_RU touch=3 keys=1/1/2 nav=3/1 orien=2 layout=35 uiMode=17 seq=1163}
01-14 03:03:23.501: I/MyEvent(28098): onReceive:Action=android.intent.action.CONFIGURATION_CHANGED
01-14 03:03:23.501: I/MyEvent(28098): updateUI
01-14 03:03:23.501: I/MyEvent(28098): updateUI,len=1
01-14 03:03:23.511: I/MyEvent(28098): MyEventAppWidgetProvider onUpdate
01-14 03:03:23.511: I/MyEvent(28098): MyEventAppWidgetProvider onUpdate: for=0
01-14 03:03:23.511: I/MyEvent(28098): widgetid=7
01-14 03:03:23.531: E/MyEvent(28098): MyEventAppWidgetService onStart
01-14 03:03:23.701: D/Chi-TRACE(27840): ________current Screen is ORIENTATION_2
01-14 03:03:23.871: D/CChi(27840): ________pause = false
01-14 03:03:24.301: D/skia(30737): purging 195K from font cache [28 entries]
Log, быстрое вращение:
01-14 03:03:55.314: D/WindowManager(27840): [rotationForOrientationLw] return curRotation: curRotation 3
01-14 03:03:55.314: I/WindowManager(27840): Setting rotation to 3, animFlags=0
Мы видим, что система видит вращение, но не говорит об этом никому.Зачем?Как мне это исправить?
HuaweyS7, Android 2.2.2.
UPD
Я нашел ответ: «но пейзаж - это пейзаж, независимо от того, еслиэто 180 градусов, поэтому система может не считать это изменением конфигурации ". полное обсуждение здесь
ТАКЖЕ Из источников Android:
Слушатель акселерометра com.android.internal.policy.impl.PhoneWindowManager.MyOrientationListener.onOrientationChanged () - обратите внимание на второй параметр в вызове функции, он называется всегдаSendConfiguration:
mWindowManager.setRotation(rotation, false, mFancyRotationAnimation);
setRotation () вызывает:
setRotationUnchecked(rotation, alwaysSendConfiguration, animFlags);
И, наконец, в setRotationUnchecked:
synchronized(mWindowMap) {
changed = setRotationUncheckedLocked(rotation, animFlags);
}
if (changed || alwaysSendConfiguration) {
sendNewConfiguration();
}
Где в sendNewConfiguration () вызывается ActivityManager, и он вызывается только в том случае, если конфигурация изменилась или если для AlwaysSendConfiguration установлено значение true.