0

我很肯定cursorIntentService實例一起銷燬,但我只是想確保沒有內存泄漏。如果這是正常的做法。我正在查詢我的自定義ContentProvider退出IntentService時應該關閉遊標嗎?

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... 
    } 
} 
+0

當然是肯定的。無論何時使用「光標」,都應立即關閉。 – SilentKnight

+0

感謝您的回答。 – Nikolai

回答

1

每次與光標的工作時間,你應該把它包在try - finally並關閉它:

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

這將確保即使拋出一個異常不會發生內存泄漏。

的Java 7帶來了嘗試,與資源,但只有Android的API 19+支持它:

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

對,我忘了例外。 'try'塊將完成這項工作。謝謝。希望我可以upvote你的答案。 – Nikolai