6


Sto eseguendo il mio test di unità su vari dispositivi Android utilizzando Instrumentation. I test funzionano perfettamente con l'emulatore & tutti i dispositivi tranne Samsung Galaxy S. Su Samsung Galaxy S si visualizza un incidente Window Manager dopo l'iniezione di circa 30 eventi chiave utilizzando strumentazione qui è la crash log completo:"Window Manager Crash" sulla chiave di invio "Giù" su Samsung Galaxy S

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) 

Ed ecco il pezzo di codice in cui generalmente si blocca:

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); 
    } 

Tutte le soluzioni/suggerimenti sono benvenuti.

+0

Quale versione di Android? –

+0

@ReubenScratton su Android 2.2 – 100rabh

+1

Fastidioso che la traccia dello stack non si allinei con nessuno degli alberi di sorgenti 2.2.x. Presumibilmente Samsung lo ha personalizzato. –

risposta

-1

in base allo stacktrace sembra che la variabile mInstrumentation sia nullo. hai dimenticato di inizializzarlo?

provare questo:

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

Non è così. 'mInstrumentation' è stato chiaramente inizializzato perché la traccia dello stack mostra l'eccezione proveniente da un figlio del metodo 'sendKeyDownUpSync'. –

0

Non sono sicuro se questo aiuta, ma mentre una breve ricerca di questo problema, ho trovato questo source. Dai uno sguardo, in particolare dalla riga 175 su un bug con DPAD_CENTER sul Galaxy S, e su come il problema è stato risolto.

+0

grazie per il suggerimento che sto affrontando il problema solo in 'ListView'. Non ho alcun metodo alternativo per passare a una posizione particolare in 'ListView' oltre a' KEYPAD_DOWN' su quel 'ListView'. – 100rabh

+0

Ah, capisco, continuerò a cercare. –

Problemi correlati