关闭cursor的几个注意点

对关闭cursor的案例:

案例1:

Cursor mCursor = query(...);

关闭方法:最好用

Try{
    ......
}finally{
   If(mCursor != null)
      mCursor.close();
}

 因为可能会在关闭cursor前 直接return,那么这个cursor就没有被关闭。而finally中的语句,不管前面是否return,都会执行到!

网上找到一个比较有趣的关于returnfinally 谁先执行的回答:

可以形象的说,方法在顺序化的一直往下走,
走着走着,发现了Rerurn(并未执行),它知道它快活不下去了,临死前.他就去找finally,让finally把事情做完.
这种情况在Debug的时候比较明显,走到Return所在行,就进finally,然后在回到Return,做返回.

  

案例2:

Cursor mCursor = query(…..);
    ......
mCursor = query(…);
if(mCursor != null)
   mCursor.close();

这种情况也是cursor没有关闭,因为查询了2次,但是只关闭了1次。这个出现的情况比较少,但是也是个陷阱。

反正用完都要关闭,要注意点~~

原文地址:https://www.cnblogs.com/chenbin7/p/2790929.html