EN JP CN

ANDROID.RLK.MEDIAPLAYER

ANDROID.RLK.MEDIAPLAYER

RLK (リソースリーク) 問題は、割り当てられたリソースが使用後に適切に破棄されなかった場合に報告されます。ANDROID.RLK.MEDIAPLAYER 警告は、開かれた MediaPlayer が明示的に閉じられていないことを示します。

脆弱性とリスク

ストリーム、接続、グラフィックオブジェクトなどのリソースは、明示的に閉じられる必要があります。閉じる操作により、トランザクションをアンブロックすることや、ファイルシステム内のファイルの変更をフラッシュすることができます。リソースは、最終的にはガーベッジコレクタにより閉じられますが、ガーベッジコレクションが開始される前にリソースの枯渇が発生する可能性があります。リソースの性質によっては、別のリソース割り当ての失敗時に、さまざまな例外がスローされます。次のような例外があります:java.io.FileNotFoundException:開かれたファイルが多すぎるか、データベース接続が多すぎます。

軽減と防止

重要でないと考えられるリソースであっても、メソッドを持つリソースはすべて明示的に閉じてください。こうすることで、将来的なコード変更時にもこのようなエラーから安全が保たれます。

例 1

19     public boolean onKeyDown(final int keyCode, final KeyEvent event) {
20         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
21             final MediaPlayer player = MediaPlayer.create(this, ringtoneUri);
22             player.start();
23 
24         }
25         return super.onKeyDown(keyCode, event);
26     }

「player」が終了時に解放されていないため、ANDROID.RLK.CAMERA が 25 行目のスニペットに対して報告されています。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。