强制活动方向重新创建活动两次
Posted
技术标签:
【中文标题】强制活动方向重新创建活动两次【英文标题】:Forcing activity orientation recreates the activity twice 【发布时间】:2015-03-25 23:16:09 【问题描述】:我正在尝试强制我的应用中的所有活动处于纵向或横向模式,从而向用户公开设置。
基本上在 onCreate() 中,我以某种方式请求正确的方向
@Override
protected void onCreate(final Bundle savedInstanceState)
setRequestedOrientation(SettingsHelper.getOrientation());
事实上,如果我们将设备保持在 portrait 模式并且请求的方向是 landscape 那么它只是在纵向模式下创建一个活动然后它在景观中重新创建它。在高端设备上这是可以接受的,因为它是瞬时的,但在低端设备上这是一场灾难,因为在创建和重新创建之间有 5 秒的延迟......
我已经尝试过的: - 不仅在 onCreate 中,在 onResume 中进行 - 在清单中定义 android:screenOrientation="nosensor" - 在清单中定义 android:screenOrientation="behind" - 在清单中定义 android:screenOrientation="unspecified" - 在清单中定义 android:configChanges="orientation"
你知道如何防止双重创建吗?
【问题讨论】:
Don't reload application when orientation changes 的可能重复项 @Szabolcs Becze:因为大多数人甚至不理解这个问题并想出了股票 configChanges 回复。 :-) 我认为您没有找到任何解决方案,因为几年后它仍然存在...***.com/questions/56828044/… 【参考方案1】:在 AmdroidManifest.xml 的活动标签中添加这一行
android:configChanges="keyboardHidden|orientation|screenSize">
例子:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
【讨论】:
谢谢你的回答,我也试过这个。即使我添加了这些标志,onCreate 也会被调用两次。 移除那个 setrequestedorientation 方法。如果它不起作用分享你的代码 更新:我观察到另一件有趣的事情。即使活动首先以纵向显示,然后以横向显示,onCreate 和 onResume 也只会调用一次。 没有什么我可以分享的...如果我删除了 setRequested Orientation,那么方向就不会改变。但我必须改变方向。以上是关于强制活动方向重新创建活动两次的主要内容,如果未能解决你的问题,请参考以下文章
如何在保持 UISearchBar 处于活动状态的同时强制 UITableView 重新加载数据?