0

スワイプでRecyclerViewからcardViewを削除するのにitemTouchHelperを使用しています my cardviewはシンプルですが、テキストと画像があるだけです カードを削除するためにスワイプしても消えませんメモリから取り出されました(画像のメモリが消えず、メモリ不足の例外が発生するのでこれを言っています) 私のコードはとてもシンプルなので、私はステップがあるかどうか疑問に思っていました。メモリから削除するには? 私のコードはthisと全く同じですスワイプでカードビューを取り除いた後にメモリが回収されない

答えて

1

通常、イメージはデバイスの画面解像度の要件に従ってスケーリングされ、アンドロイドメモリにロードされ、プロセスが終了するか、死んだりガベージコレクタによって収集されるまでそこに保持されます。

カードビュー(またはresフォルダ内の他の画像)の画像サイズが大きく、アンドロイドによるスケーリング後の画像がメモリを多用しすぎてメモリ例外が発生する可能性があります。画像のサイズを縮小してみてください(google iconsのアイコンサイズと比較してみてください、それらはすべてKb未満です)。

フォルダーをresフォルダーに作成し、このフォルダーに大きなサイズのイメージを置くと、これらのイメージを縮尺してそのままレンダリングしないことがわかります。 (このアプローチに従うと、すべての画面デバイスでテストを行ってください。イメージが異なる画面サイズで拡大縮小されるようになります)。

最後に、ユーザーがカードスワイプアクションを実行した後で、上記のいずれも実行しようとしない場合はSystem.gc()となります。これはガベージコレクタを実行し、イメージはメモリから削除されます。 (この方法では、すべてのデバイスで動作するガベージコレクタが保証されるわけではありませんので、上記の2つの方法を試してみてください)。

希望すると便利です。

+0

ありがとうございました!私は実際にピカソを使用してイメージを縮小し、スペースを取らないようにしていますが、使用したメモリのモニターを見たときに気づいたのは、リサイクルされたビューメモリが下がらない、別の要素を追加するとメモリが上昇し続ける(削除されたイメージがリサイクルされないように)、他の方法でその動作を説明することはできません。それをメモリから削除してください – user1

+0

ピカソはメモリフットプリントを持っています。ここでチェックしてください: 'http:// stackoverflow.com/questions/31925461/picasso-out-of-memory' –

関連する問題