应用程序崩溃时警告对话框打开和电话(模拟器)改变其方向模拟器、对话框、应用程序、方向

2023-09-05 11:18:57 作者:淺笑如夏゛

家伙,我一直在寻找和研究这个了一整天。该应用程序崩溃,不仅在一个对话框打开,而且当一个微调是开放的(我敢肯定,这将是很多其他的场景,我还没有碰到过)。

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).

onRetainNonConfigurationInstance()和onConfigurationChanged(配置NEWCONFIG)之间的选择会不会帮我。 (也许我错了) - 其实我preFER使用第一个

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给我的提示和指导。  提前致谢。

plz give me hints and guidance. Thanks in advance.

::

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?

推荐答案

您使用 progressDialog.show() progressbarDialog.dismiss() 在AyncTask?

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

如果是尝试使用的ShowDialog(ID)在AyncTask,而不是它和 dismissDialog(ID)。你将不得不写在 onCreateDialog()自定义对话框显示加载对话框。 的ShowDialog和dismissDialog方法是活动水平的方法。我的意思是,他们都对活动或其上下文调用。因此,即使活动方向更改后重新创建,最新的情况下将是对话提供。

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.

检查样品code here.它修改 DIALOG_PROGRESS 情况下,按照您的要求。

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

此外, onRetainNonConfigurationInstance()作品完美的方向变化。它只是说,由于窗口泄漏问题你是不是能够看到它。

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