2011-12-30 4 views
2

私は共有ライブラリを使用する小さなアプリケーションを開発しました。デバイスのヒープメモリでアンドロイドアプリケーションを実行すると、急速に増加しています。私はgc()を使ってそれを減らそうとしていますが、それは私の仕事ではありません。一度に、低メモリのようなメッセージを受け取っていない、バックグラウンドプロセスと私のアプリケーションを終了します。どうすればこの問題を解決できますか?アンドロイドでメモリリークを処理する

+0

を投稿するまで

より詳細な答えはposssibleないメモリー/リソースを割り当てる任意のループは、クラスの新しいインスタンスを作成し、そこにはありますか?そのようなループコードを表示してください – sll

+0

実際には、ライブ壁紙のアプリケーションです。その中で、ビデオファイルを壁紙として読み込んでいるので、jniコードでffmpegを使ってビデオファイルをコンパイルし、壁紙を描画するためにOpenGLを使用します。 jniファイルでは、av_malloc関数を使用しています。 – Satheesh

+0

周りにループがありますか? – sll

答えて

1

GCを使用するだけでなく、不要なオブジェクトへの参照も削除します.GCは参照されたオブジェクトを再利用しません。また、JNIライブラリが何をしているのか注意深く捉え、開始スレッドのメモリを割り当てた場合に必要な予防措置を講じます。あなたが使用しているかと言うとソース

+0

実際には、ライブ壁紙アプリケーションです。その中で、ビデオファイルを壁紙として読み込んでいるので、jniコードでffmpegを使ってビデオファイルをコンパイルし、壁紙を描画するためにOpenGLを使用します。 – Satheesh

+0

手動で参照を削除する必要がありますか?私は、実行が参照宣言スコープから移動してから参照が自動的に破棄されると考えています。 – sll

+0

それは異なります。実行スコープはそれとは関係ありません。 onPause()の後のある時点で、アンドロイドフレームワークはあなたのアクティビティへの参照を落とし、ガベージコレクションのために利用可能にしました(アクティビティによって保持された参照は順番にドロップされます)...しかし、変数(一般的なエラーです。アクティビティはあらゆる場所で仮想的に必要なコンテキストなので)、すべてのリファレンスがまったくあなたの記憶を詰まらせて、まったく再生されません –

関連する問題