我应该在退出IntentService时关闭光标吗?

时间:2015-04-12 22:34:26

标签: android android-contentprovider android-cursor android-intentservice

我很确定使用cursor实例销毁了IntentService,但我只是想确保没有内存泄漏。如果这是正常的做法。我正在查询我的自定义ContentProvider

class MyService extends IntentService {
    protected void onHandleIntent(Intent intent) {
        Cursor cursor = getContentResolver().query(
                MyContentProvider.CONTENT_URI, null, null, null, null);
        if (cursor.getCount() == 0) {
            return; // exit the method
        } else {
            cursor.close();
        }
        // some code...
    }
}

1 个答案:

答案 0 :(得分:1)

每次使用光标时,都应将其包装在try - finally中并关闭它:

Cursor cursor = …;
if (cursor == null)
    return;
try {
    …
} finally {
    cursor.close();
}

这将确保即使抛出异常也不会发生内存泄漏。

Java 7带来了try-with-resources,但只有Android API 19+支持它:

try (Cursor cursor = …)
{
    …
} // Cursor closed automatically