作者plokmijnuhb (..)
看板AndroidDev
标题[问题] 关於try-with-resource
时间Wed Jun 20 22:47:32 2018
最近用cursor注意到java有try-with-resource可用
看起来类似以前用过C#的using,在statement结束时会自动close resource
程式码写起来类似
try(Cursor cursor = getContentResolver().query(xxxx)) {
// do something
} catch (Exception ex) {
// handle exception
}
我的问题是cursor真的会保证close吗?
程式执行的顺序应该会是
cursor.close() -> catch
假如cursor发生exception的话
也能在这个catch中hook到吗?
万一没有的话, 是不是就memory leak了?
以前的写法好像也差不多,还保证exception都捞的到
Cusor cursor = null;
try {
cursor = getContentResolver().query(xxxx);
} catch(Exception ex) {
// handle exception
} finally {
try {
if(cursor != null && !cursor.isClose()) {
cursor.close();
}
} catch(Exception ex) {
//handle exception
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.34.126.161
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1529506055.A.F1A.html
1F:推 salavida: Cursor有implements Closeable try-with一定能close 06/20 23:39
2F:→ y3k: 你把Cursor换成JSONObject看他会怎麽错就知道了 06/21 20:01
3F:→ ssccg: try resource就是自动帮写finally close啊.. 06/21 22:02
4F:→ ssccg: 就不用把变数scope扩大到try block外面,也不用检查null还 06/21 22:05
5F:→ ssccg: 要处理close的exception,那些都多写的... 06/21 22:05
6F:→ ssccg: 另外没close是resource leak,不是memory leak 06/21 22:06