我在我的一个应用程序中遇到了一份崩溃报告,这似乎是我的代码中不应该发生的事情......
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
我检查了 Timer 源并验证 IAE 应该只发生在delay < 0
,但我检查一下delay > 0
。最重要的是,除非有一些设计不佳的自定义键盘会忽略输入类型/数字(这甚至可能吗?),否则用户只能在文本字段中输入数字 0-9,不能输入负号或句点或其他任何内容。
由于我无法重现崩溃或与遇到它的任何用户交流,我无法调试它。报告的相对数量足以让我有点担心。