6


我在使用Instrumentation的各種android設備上運行我的單元測試。除了Samsung Galaxy S之外,所有設備上的仿真器&都能正常工作。關於在Samsung Galaxy S上調度'Down'鍵的「窗口管理器崩潰」

D/dalvikvm(11862): GC_EXPLICIT freed 6800 objects/374040 bytes in 54ms 
D/dalvikvm(11862): GC_EXPLICIT freed 780 objects/71856 bytes in 39ms 
W/dalvikvm(11862): threadid=9: thread exiting with uncaught exception (group=0x4001d7d0) 
E/WindowManager(2472): Window Manager Crash 
E/WindowManager(2472): java.lang.NullPointerException 
E/WindowManager(2472):   at com.android.server.WindowManagerService$KeyWaiter.waitForNextEventTarget(WindowManagerService.java:5844) 
E/WindowManager(2472):   at com.android.server.WindowManagerService.injectKeyEvent(WindowManagerService.java:5565) 
E/WindowManager(2472):   at android.view.IWindowManager$Stub.onTransact(IWindowManager.java:110) 
E/WindowManager(2472):   at com.android.server.WindowManagerService.onTransact(WindowManagerService.java:692) 
E/WindowManager(2472):   at android.os.Binder.execTransact(Binder.java:288) 
E/WindowManager(2472):   at dalvik.system.NativeStart.run(Native Method) 
E/AndroidRuntime(11862): FATAL EXCEPTION: Instr: com.myapp.test.ImpInstrumentation 
E/AndroidRuntime(11862): java.lang.NullPointerException 
E/AndroidRuntime(11862):  at android.os.Parcel.readException(Parcel.java:1266) 
E/AndroidRuntime(11862):  at android.os.Parcel.readException(Parcel.java:1248) 
E/AndroidRuntime(11862):  at android.view.IWindowManager$Stub$Proxy.injectKeyEvent(IWindowManager.java:830) 
E/AndroidRuntime(11862):  at android.app.Instrumentation.sendKeySync(Instrumentation.java:859) 
E/AndroidRuntime(11862):  at android.app.Instrumentation.sendKeyDownUpSync(Instrumentation.java:872) 
E/AndroidRuntime(11862):  at com.myapp.test.util.ListUtil.<b>arrowDownToPosition</b>(ListUtil.java:69) 

這裏是一段代碼,它通常會崩潰:

在三星Galaxy S是使用儀器下面是完整的崩潰日誌注入一些30關鍵事件後顯示 窗口管理器崩潰
private void arrowDownToPosition(int position) { 
      int maxDowns = 50; 
     while(mListView.getSelectedItemPosition() < position && --maxDowns > 0) { 
      mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN); 
     } 

//Crashes on below line dispatching enter key 
     mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_ENTER); 
    } 

歡迎提供所有解決方案/建議。

+0

什麼版本的Android? – 2012-02-03 10:56:38

+0

Android 2.2上的@ReubenScratton – 100rabh 2012-02-03 12:29:16

+1

煩惱你的堆棧跟蹤與2.2.x源代碼樹不一致。據推測三星定製它。 – 2012-02-03 13:20:38

回答

-1

根據您的堆棧跟蹤,似乎您的變量mInstrumentation爲空。你忘了初始化它嗎?

試試這個:

while(mInstrumentation!=null && mListView.getSelectedItemPosition()>-1) { 
    mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN); 
} 
+1

不是不是。 'mInstrumentation'已經被初始化了,因爲堆棧跟蹤顯示了來自'sendKeyDownUpSync'方法的一個子內部的異常。 – 2012-02-09 12:06:57

0

不知道這是否會有所幫助,但同時簡要地研究這個問題,我發現這個source。看一看,特別是第175行關於Galaxy S上的DPAD_CENTER的錯誤,以及問題是如何解決的。

+0

感謝提示,我只在'ListView'中遇到問題。除了'ListView'上的'KEYPAD_DOWN'之外,我沒有任何替代方法移動到'ListView'中的特定位置。 – 100rabh 2012-02-29 15:26:17

+0

啊,我明白了,我會繼續尋找。 – 2012-02-29 21:41:17

相關問題