警报对话框打开并且电话(仿真器)更改其方向时,应用程序崩溃 [英] app crashes when alert dialog is open and phone(emulator) changes its orientation

查看:220
本文介绍了警报对话框打开并且电话(仿真器)更改其方向时,应用程序崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在搜索和研究一整天。应用程序不仅在对话框打开时崩溃,而且在微调器打开时也会崩溃(我确定这将是一些我没有遇到的其他情况)。


$ b在onRetainNonConfigurationInstance()和onConfigurationChanged(Configuration newConfig)之间选择的$ b

将不会帮助我。 (也许我错了) - 实际上我更喜欢使用第一个。



但是我想问:对于一个单独的打开对话框或打开的微调器,我必须从头开始创造一切?这是一种方式吗有时候,只需稍等一段时间就可以重新初始化一个大型的小组,那么用户可能会改变方向。



请给我提示和指导。
提前感谢。



::

 错误代码:

01-25 17:56:48.182:错误/ WindowManager(312):活动XXX已经泄漏窗口com.android.internal.policy.impl.PhoneWindow$DecorView@43e63058,最初在这里添加
01 -25 17:56:48.182:错误/ WindowManager(312):android.view.WindowLeaked:活动XXX已经泄漏窗口com.android.internal.policy.impl.PhoneWindow$DecorView@43e63058
最初是在这里添加的
01-25 17:56:48.182:错误/ WindowManager(312):在android.view.ViewRoot。< init>(ViewRoot.java:247)
01-25 17:56:48.182 :ERROR / WindowManager(312):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
01-25 17:56:48.182:错误/ WindowManager(312):在android.view.WindowManagerImpl。 addView(WindowManagerImpl.java:91)
01-25 17:56:48.182:错误/ WindowManager(312):在android.view.Window $ LocalWindowManager.addView(Window.java:424)
01 -25 17:56:48.182:错误/ WindowManager(312):在android.app.Dialog.show(Dialog.java:241)
01-25 17:56:48.182:错误/ WindowManager(312):在XXX.menuGroupDialog(XXX.java:946)
0 1-25 17:56:48.182:错误/ WindowManager(312):在XXX.onOptionsItemSelected
(GroupManagement.java:257)
01-25 17:56:48.182:错误/ WindowManager ):at android.app.Activity.onMenuItemSelected(Activity.java:2195)01-25 17:56:48.182:ERROR / WindowManager(312):at
com.android.internal.policy.impl.PhoneWindow。 onMenuItemSelected(PhoneWindow.java:730)
01-25 17:56:48.182:错误/ WindowManager(312):在com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
01-25 17:56:48.182:错误/ WindowManager(312):在com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
01-25 17:56 :48.182:
错误/ WindowManager(312):在com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
01-25 17:56:48.182:错误/ WindowManager(312):在com.andro id.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
01-25 17:56:48.182:错误/ WindowManager(312):在android.view.View $ PerformClick.run(查看.java:8816)
01-25 17:56:48.182:错误/ WindowManager(312):
android.os.Handler.handleCallback(Handler.java:587)
01- 25 17:56:48.182:错误/ WindowManager(312):android.os.Handler.dispatchMessage(Handler.java:92)
01-25 17:56:48.182:错误/ WindowManager(312):at android.os.Looper.loop(Looper.java:123)
01-25 17:56:48.182:错误/ WindowManager(312):
android.app.ActivityThread.main(ActivityThread.java :4627)
01-25 17:56:48.182:错误/ WindowManager(312):在java.lang.reflect.Method.invokeNative(本机方法)
01-25 17:56:48.182:错误/ WindowManager(312):在java.lang.reflect.Method.invoke(Method.java:521)
01-25 17:56:48.182:错误/ WindowManager(312):在
com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
01-25 17:56:48.182:错误/ WindowManager(312):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-25 17:56:48.182:错误/ WindowManager(312):at
dalvik.system.NativeStart.main(Native Method)

我知道这是从调用dismiss()函数。但是在打开对话框时如何处理方向更改?

解决方案

您是否使用 progressDialog.show )在AyncTask中 progressbarDialog.dismiss()



如果是,请尝试使用 showDialog(id) dismissDialog(id)在AyncTask而不是它。您必须在 onCreateDialog()中编写自定义对话框,以显示加载对话框。
showDialog和dismissDialog方法是活动级别的方法。我的意思是他们在活动或其上下文中被调用。因此,即使活动在方向更改后重新创建,最新的上下文将可用于对话框。



检查示例代码这里根据您的要求修改 DIALOG_PROGRESS 案例。



另外, onRetainNonConfigurationInstance()与方向更改完美无缺。这只是因为窗口泄漏问题,你无法看到它。


guys I've been searching and studying about this for a whole day. The app crashes not only when a dialog is open, but also when a spinner is open (and I'm sure it would be bunch of other scenarios that I haven't come across).

choosing between onRetainNonConfigurationInstance() and onConfigurationChanged(Configuration newConfig) won't help me. (maybe I'm wrong) - actually I prefer to use first one.

BUT I want to ask: for a single open dialog box or open spinner do I have to create everything from scratch? is this a way? sometimes it's worthless to reinitialize a big class with lot of widgets inside just for a time that maybe user changes the orientation.

plz give me hints and guidance. Thanks in advance.

Edited :::

Error code:

01-25 17:56:48.182: ERROR/WindowManager(312): Activity XXX has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@43e63058 that was originally added here
01-25 17:56:48.182: ERROR/WindowManager(312): android.view.WindowLeaked: Activity XXX has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@43e63058 that 
was originally added here
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.view.ViewRoot.<init>(ViewRoot.java:247)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.app.Dialog.show(Dialog.java:241)
01-25 17:56:48.182: ERROR/WindowManager(312):     at XXX.menuGroupDialog(XXX.java:946)
0    1-25 17:56:48.182: ERROR/WindowManager(312):     at XXX.onOptionsItemSelected
(GroupManagement.java:257)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.app.Activity.onMenuItemSelected(Activity.java:2195)01-25 17:56:48.182: ERROR/WindowManager(312):     at 
com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730)
01-25 17:56:48.182: ERROR/WindowManager(312):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
01-25 17:56:48.182: ERROR/WindowManager(312):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
01-25 17:56:48.182: 
ERROR/WindowManager(312):     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
01-25 17:56:48.182: ERROR/WindowManager(312):     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.view.View$PerformClick.run(View.java:8816)
01-25 17:56:48.182: ERROR/WindowManager(312):     at 
android.os.Handler.handleCallback(Handler.java:587)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 17:56:48.182: ERROR/WindowManager(312):     at android.os.Looper.loop(Looper.java:123)
01-25 17:56:48.182: ERROR/WindowManager(312):     at 
android.app.ActivityThread.main(ActivityThread.java:4627)
01-25 17:56:48.182: ERROR/WindowManager(312):     at java.lang.reflect.Method.invokeNative(Native Method)
01-25 17:56:48.182: ERROR/WindowManager(312):     at java.lang.reflect.Method.invoke(Method.java:521)
01-25 17:56:48.182: ERROR/WindowManager(312):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-25 17:56:48.182: ERROR/WindowManager(312):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-25 17:56:48.182: ERROR/WindowManager(312):     at 
dalvik.system.NativeStart.main(Native Method)

I know that this is from calling dismiss() function. but how can I handle orientation change when having dialog open?

解决方案

Are you using progressDialog.show() and progressbarDialog.dismiss() in the AyncTask?

If yes try using showDialog(id) and dismissDialog(id) in the AyncTask instead of it. You will have to write custom dialog in the onCreateDialog() for showing the loading dialog. showDialog and dismissDialog methods are activity level methods. I mean they are invoked on the Activity or its Context. So even if the activity is recreated after orientation change, latest context will be made available for the Dialog.

check for Sample code here. Modify DIALOG_PROGRESS case in it as per your requirement.

Also, onRetainNonConfigurationInstance() works perfectly with the orientation change. It just that due to window leak problem you are not able to see it.

这篇关于警报对话框打开并且电话(仿真器)更改其方向时,应用程序崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆