不管你信不信,即使多么熟练编程的人员在coding的时候都会出现意想不到的bug。在上篇文章中我曾提到,bug的造成是多个方面的综合结果,有些bug是可以修复的,但是有些逻辑上的bug要修复可不是那么容易的事情,就像我们做错了一件事情,如果不去从根本上改正就会犯更大的错误一样,有时候bug也是一个积累的过程。
在经历了android上的开发之后,我改变了我最初的想法,让我认识到了即使再简单的开发平台,开发一款产品都需要一个严密的逻辑认证,认证之后再进行开发,不仅能提高代码的生产效率,还能减少很多产品的bug。
下面是我遇到的一些基本简单的bug,但是修复却花费了一段时间:
(1)android.view.WindowManager$BadTokenException: Unable to add window --
token android.os.BinderProxy@342917f8 is not valid; is your activity
running?
是由于有activity时依附于另一个activity的,当被依附的activity产生错误的时候,该activity没有了靠山而产生错误。对于这个错误
还没有根本的解决办法,唯一的办法就是改变该activity依附于另一activity的事实,将其放入另一activity。
(2)01-13 17:21:04.408: WARN/System.err(20476): java.net.SocketException: The connection was reset
原因是由于没有关闭socket链接造成的。
(3)java.net.SocketTimeoutException: The operation timed out
该问题是由于没有捕获链接超时的异常导致的错误。需要在代码后面
catch(SocketTimeoutException e){
sendMessage(FILE_DOWNLOAD_ERROR, e);
}
(4)android.view.WindowLeaked: Activity com.*.* has leaked window
(5)07-13 14:31:56.962: INFO/global(1194): Default buffer size used in BufferedWriter constructor. It would be better to be explicit if an 8k-char buffer is required.
07-13 14:31:57.012: ERROR/AndroidRuntime(7141): java.lang.IllegalArgumentException: Activity#onCreateDialog did not create a dialog for id 110
07-13 14:31:57.012: ERROR/AndroidRuntime(7141): at android.app.Activity.createDialog(Activity.java:869)
无法显示出dialog。代码如下所写:
private static final int SEARCH_DIALOG_Progress = 110;
protected Dialog onCreateDialog(int id){
switch(id){
case SEARCH_DIALOG_Progress:
search_progressDlg = new ProgressDialog(this);
search_progressDlg.setTitle("search");
search_progressDlg.setMessage("is in searching! please wait!");
search_progressDlg.setOwnerActivity(getParent());
search_progressDlg.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event){
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
mManager.mCancelDownload = true;
if(null != search_progressDlg)
search_progressDlg.dismiss();
Util.d(TAG, "keycode_back");
return true;
}
return false;
}
});
return null; //应该是return search_progressDlg.
}
return null;
}
原因是在创建了progressDialog后没有返回。