如何处理显示 ProgressDialog 的方向变化?

Posted

技术标签:

【中文标题】如何处理显示 ProgressDialog 的方向变化?【英文标题】:How to deal with orientation change with a ProgressDialog showing? 【发布时间】:2011-04-11 08:42:56 【问题描述】:

我在 AsyncTask 对象的 onPreExecute 方法中显示 ProgressDialog 并在 onPostExecute 方法中取消 ProgressDialog。在doInBackground 方法中,我正在为用户注册发出HTTP 请求。我希望允许屏幕方向更改。当我在 doInBackground 方法仍在运行时更改方向时,我会收到各种有趣的错误,例如“IllegalArgumentException: View not attach to window manager”和“RegisterScreen has leaked window...”

如何在方向改变后正确地继续显示ProgressDialog?或者,如何在用户请求提交注册后禁用方向更改?

【问题讨论】:

[这里是答案][1] 我认为这就是您正在寻找的解决方案。 [1]:***.com/a/3821998/1665247 【参考方案1】:

尝试将此属性android:configChanges="orientation" 添加到AndroidManifest.xml 文件中的Activity 元素。

【讨论】:

这成功了!我真傻,我应该知道这是解决办法。 我必须在其中添加“screenSize”以针对 API 级别 13 及更高级别。否则它不适用于这些环境。 android:configChanges="orientation|screenSize" 感谢 screenSize 提示!我有“方向|键盘”,突然它不再工作了。这很好用,谢谢!【参考方案2】:

您可以尝试在显示 ProgressDialog 期间禁用方向更改。

在开头做:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

并在完成后重新启用:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

希望这会有所帮助。

(如果有人有合适的解决方案,我也会感兴趣:-)

【讨论】:

问题不在于方向改变。由于活动生命周期会破坏并重新创建您的活动,因此您会看到这些问题。阻止方向更改将阻止此特定生命周期实例,但是当用户在 ProgressDialog 期间按“Home”并返回时,会出现相同的问题。您的活动应设计为随时关闭和重新启动。 如果我的 AsyncTask 不在我的活动中怎么办......它在许多活动类共有的另一个类文件中。那我怎样才能得到 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 很好,但要锁定方向 ActivityInfo.SCREEN_ORIENTATION_LOCKED 对我来说效果更好,尤其是在横向中。【参考方案3】:

您希望正确处理活动生命周期,这意味着保存和恢复活动状态,而不是试图阻止生命周期更改。阅读 AsyncTask 与 Activity 生命周期。

例如:pause-and-resume-asynctasks-android 和 what-to-do-with-asynctask-in-onpause。

【讨论】:

【参考方案4】:

将此添加到应用程序 manifest.xml 的活动标记中

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

【讨论】:

【参考方案5】:

就我而言,我使用过

android:configChanges="orientation" 

但它对我不起作用

以下工作正常

<activity android:name=".MyActivity" 
          android:configChanges="orientation|screenSize|screenLayout">
</activity>

【讨论】:

【参考方案6】:

您可以在您的清单中使用以下代码

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

【讨论】:

以上是关于如何处理显示 ProgressDialog 的方向变化?的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController:如何处理视图控制器的不同方向?

iOS - 如何处理自定义表格单元格中的方向变化

进度对话框和后台线程处于活动状态时如何处理屏幕方向更改?

进度对话框和后台线程处于活动状态时如何处理屏幕方向更改?

如何处理Knockout的分页

如何处理横向滑动