1
我在我的應用程序,似乎什麼東西在我的代碼不應該發生的一個遇到崩潰報告...定時器拋出:IllegalArgumentException與正延遲
java.lang.IllegalArgumentException
at java.util.Timer.schedule(Timer.java:461)
at com.pilot51.voicenotify.Service.onAccessibilityEvent(Service.java:177)
at android.accessibilityservice.AccessibilityService$IEventListenerWrapper.executeMessage(AccessibilityService.java:215)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4633)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
下面是相關的代碼該修訂:
int delay = 0;
try {
delay = Integer.parseInt(Common.prefs.getString("ttsDelay", null));
} catch (NumberFormatException e) {}
if (delay > 0) {
final String msg = newMsg;
new Timer().schedule(new TimerTask() { // This is line 177
public void run() {
speak(msg, true);
}
}, delay * 1000);
}
完整的源:https://github.com/pilot51/voicenotify/blob/v1.0.9.1/src/com/pilot51/voicenotify/Service.java
我檢查了定時器源和驗證ŧ帽子IAE只應該發生,如果delay < 0
,但我有一個檢查,delay > 0
。最重要的是,除非有一些設計不當的自定義鍵盤忽略輸入類型/數字(甚至可能?),用戶只能在文本字段中輸入數字0-9,沒有負號或句點或其他任何內容。
由於我無法重現崩潰或與任何遇到它的用戶通信,我無法對其進行調試。報告的相對數量足以讓我有點擔心。
好暗示!作爲一個快速修復:使用長 – Enno
謝謝!在發佈之前,我嘗試將它設置爲一個可以超出很長範圍的可笑的大數目,並且沒有崩潰(當NFE被捕獲時,它保持爲0)。我沒有考慮測試範圍內的大數,因爲我不知道它們在超出範圍計算時變得消極,並且沒有想到。現在我明白了。快速修復就是將'1000'改成'1000L',這樣就可以通過了。還有一個謎團:爲什麼有人會在2147484和2147483647秒之間設置一個延遲? –