在eclipse中debug Android sample Snake的问题
tony.ye
2008-10-12
最近在看Android SDK附带的smaple代码来熟悉Android的开发,但遇到一个比较奇怪的问题。
问题挺奇怪的,只有在用eclipse进行run或者debug时才会有这种出错的情况,而如果你不经过eclipse而直接打开android的模拟器的话,运行是没有问题的。在eclipse悬在run/debug as Android Application时,Android模拟器打开Application,然后按Up键开始游戏时就会有unexception error提示出错,然后退出application,但在模拟器中重新打开application时就不会再有这种错误了。 我设断点跟踪了一下,发现Snake这个Activity的OnCreate在debug时一开始就调用了两次,而这样的话,在第一次启动后的关闭Activity过程中就会调用onSaveInstanceState函数保存状态,但这时SnakeView里需要保存的mSnakeTrail变量根本未初始化,但变量仍然会保存。 而这样的话在第二次调用OnCreate时,由于已保存了Bundle,savedInstanceState不为null,就会当作PAUSE然后恢复的情况进行处理,调用SnakeView的restoreState函数从Bundle从恢复变量,这样mSnakeTrail就依然是空值。当你按Up键时,由于是从PAUSE状态恢复,代码就不会调用initNewGame函数重新建立mSnakeTrail了,最终在updateSnake函数时出错。 不太明白为什么会有这种情况,可能是android模拟器为了添加eclipse debugger而做过处理?但对于我来说为了能进行debug,目前就在SnakeView中的restoreState函数添加了代码进行判断,当是这种情况时将状态设为READ然后返回。 if(coordArrayToArrayList(icicle.getIntArray("mSnakeTrail")).isEmpty()) { setMode(READY); return; } 但为什么会有这种情况呢?是我的eclipse设置有问题吗? |