どーも最近ブログが書けなかったけど新年に書いてみる(ただし書いたのはほぼ昨日)
Androidの画像に関するアプリを作ってたけどどーもMemoryLeakが起きるので
一つ一つ潰しながら頑張った備忘録 やっと目途が立ってきた
画像系の問題ってのは察してたがLeak Canaryなるライブラリの存在を知り試してみた
アプリ起動中にメモリのリークを感知して通知してくれるという神ライブラリ
導入も超簡単
こんな感じで通知をくれる

Fragmentのreplace時のObjectAnimatorにCardFlipを導入したんだけど
Orientationの変更とCardFlip時に頻繁にリークしてるらしく手直し
だいたい特定できるのは助かるなー
CardFlipはこちら
<MyAppの構成>
表面=FragmentA(Portrait/Landscape)
裏面=FragmentB(Portrait) FragmentC(Landscape)
3Fragment構成があまりよくなかったらしく今回の解法は...
・Bitmapクラスは使用後必ず.recycle()(TypedArrayかなんかもそうだった気がする)
さらに極力ImageViewクラスを使用後破棄するタイミングでBackgroundDrawable(null)と
ImageResourceDrawable(null)で潰した方が良いらしい
GCに処理してもらいやすくなるのかな?
・FragmentAがsetRetainInstance(true)なためaddToBackStackを使用しない
─ setRetainInstanceを使用した場合はaddToBackStackは使用できないらしい
自分で試していた感じだとFragmentInstanceが2-4-8・・・と無限にできる
このためpopBackStackは使用できず毎度手動でreplace/remove/addとした
・ActivityはFragmentContainerのみだったのでmanifestsの該当Activityを
android:configChanges="orientation|keyboardHidden|screenSize"
としてActivityの再生成をなくした
orientation … 画面の向き変更時
keybordHidden … これを書くのは儀式的なものらしい 今回のActivityにキーボードはない
screenSize … 4.x以降に(?)できたらしくこれを書かないとorientationを書いても意味がなかった
・extends ApplicationのClass内、onLowMemoryにSystem.gc()を追加(おまじない)
あとPicassoやGlideを使用するといい感じにメモリも制御してくれるらしいけど
今回は使用しないことにした
年度初めにメモリリークのブログとはあまり縁起良くない気もするけど
気を引き締めて行こうということにして締めよう
Henry Ford(フォード・モーター創業者)

”Before everything else, getting ready is the secret of success.
─ 成功の秘訣は、何よりもまず、準備すること。