强制活动方向重新创建活动两次

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 重新加载数据?

Android:暂时禁用活动中的方向更改

如何检查android是不是要重新创建活动或销毁?

Android - 在活动重新创建期间是不是保留了意图?

FragmentStatePagerAdapter 视图分页器片段在活动重新创建后不显示

FragmentStatePagerAdapter视图分页器片段在重新创建活动后未显示