Eclipse (Juno) daje następujące ostrzeżenie:Dlaczego ten kod generuje ostrzeżenie o "potencjalnym wycieku zasobów"?
Potencjalny przeciek zasobu: 'os' nie mogą być zamknięte
w pierwszej linii ciała try
w tym kodzie:
static void saveDetails(byte[] detailsData) {
OutputStream os = null;
try {
os = sContext.openFileOutput(DETAILS_FILE_NAME, Context.MODE_PRIVATE);
os.write(detailsData);
} catch (IOException e) {
Log.w(LOG_TAG, "Unable to save details", e);
} finally {
if (os != null) {
try {
os.close();
} catch (IOException ignored) {
}
}
}
}
Metoda openFileOutput
jest zadeklarowana jako rzut FileNotFoundException
.
Czy to jest fałszywy alarm? Wydaje się, że jest to całkiem waniliowa analiza ścieżki wykonania.
Byłoby łatwiej, gdybyś zaznaczył, które zaćmienie linii narzeka, ale zgaduję, że jest to związane z linią openFileOuput - Jak długo działa otwarty obiekt? Czy plik musi zostać zamknięty? – atk
@atk - OP oznacza, że ostrzeżenie znajduje się w pierwszym wierszu ciała próby. Więc 'os = sContext.OpenFileOutput ...'. –
Jeśli 'sContext' ma wartość NULL, zostanie zgłoszony wyjątek NullPointerException, a na końcu nigdy nie zostanie uruchomiony, ponieważ nie jest złapanym wyjątkiem. W tym przypadku 'os' nie zostanie zamknięte (lub otwarte). –