对关闭cursor的案例:
案例1:
Cursor mCursor = query(...);
关闭方法:最好用
Try{ ...... }finally{ If(mCursor != null) mCursor.close(); }
因为可能会在关闭cursor前 直接return,那么这个cursor就没有被关闭。而finally中的语句,不管前面是否return,都会执行到!
网上找到一个比较有趣的关于return和finally 谁先执行的回答:
可以形象的说,方法在顺序化的一直往下走, 走着走着,发现了Rerurn(并未执行),它知道它快活不下去了,临死前.他就去找finally,让finally把事情做完. 这种情况在Debug的时候比较明显,走到Return所在行,就进finally,然后在回到Return,做返回.
案例2:
Cursor mCursor = query(…..); ...... mCursor = query(…); if(mCursor != null) mCursor.close();
这种情况也是cursor没有关闭,因为查询了2次,但是只关闭了1次。这个出现的情况比较少,但是也是个陷阱。
反正用完都要关闭,要注意点~~