这个错误日志是什么意思?

时间:2014-03-16 04:40:20

标签: android

我在进行猴子测试时遇到了来自在线测试机构的错误,但由于在线工具进行了测试并产生了这个错误,我不确定它是怎么来的,它是什么意思。我可以最远看它,并说它与对话框显示有关,但我不确定。

任何人都能从中得出结论并让我知道造成这个问题的确切问题是什么?

monkeyExercise({eventCount: 5000, throttle: 5, seed: 0})

CRASH: com.company.apppackage (pid 2306)
Short Msg: java.lang.IllegalArgumentException
Long Msg: java.lang.IllegalArgumentException: View not attached to window manager
Build Label: generic_x86/sdk_x86/generic_x86:4.3/JSS15J/eng.android-build.20130801.155736:eng/test-keys
Build Changelist: eng.android-build.20130801.155736
Build Time: 1375343923000
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:406)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:308)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79)
at android.app.Dialog.dismissDialog(Dialog.java:323)
at android.app.Dialog.dismiss(Dialog.java:306)
at com.company.apppackage.util.AppProgressDialog$PGTask.onPostExecute(AppProgressDialog.java:177)
at com.company.apppackage.util.AppProgressDialog$PGTask.onPostExecute(AppProgressDialog.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

** Monkey aborted due to error.
Events injected: 2445
## Network stats: elapsed time=18186ms (18166ms mobile, 0ms wifi, 20ms not connected)
** System appears to have crashed at event 2445 of 5000 using seed 1393545256246

1 个答案:

答案 0 :(得分:0)

问题是调用dismiss()时对话框没有显示。您在AsyncTask(类PGTask)时关闭对话框,而不是来自用户事件。尝试更改onPostExecute中的代码:

dialog.dismiss();

if (dialog.isShowing()) {
    dialog.dismiss();
}

编辑:如果上述问题无法解决问题,则另一种可能性是在解除对话框之前销毁活动。 (例如,如果在显示对话框时重新定向设备,或者如果您调用finish(),则很容易发生这种情况。)这里有一些修复方法。

第一个(也许是最干净的)是避免明确地显示和解除对话框,而是让活动去做。然后,您的onPostExecute可以修改为:

activity.dismissDialog(DIALOG_ID);

(其中activity是对您的活动的引用,DIALOG_ID是您为此特定对话框定义的int。您还需要修改显示对话框的代码(在onPreExecute?中):

activity.showDialog(DIALOG_ID);

您需要设置活动onCreateDialog(可能onPrepareDialog)来处理DIALOG_ID

另一种可能性是覆盖活动的onDestroy()方法以关闭对话框。有关如何执行此操作的示例,请参阅this thread