textdrop
翻訳 / 読書 / プログラミング / 日記
Navigation
  • ブログ
  • チートシート
  • スタイルガイド
  • 翻訳
  • 読書
  • ソフト
  • お問い合わせ
← i.LINK? I-Link? I-link?
Androidで画面の向きを高速に変更 →

Androidでのメモリリーク回避

2009-04-06 | Filed under: ソフトウェア and tagged with: Android

androidAndroid Developers BlogよりAvoiding memory leaksを読んで、個人的備忘録(なので、正確さは無保証です)。

# 追記:Android Zaurusさんのところに全訳がありました

不要な参照をしていると、期待通りにGCでメモリが解放されない(ここではこれをメモリリークと呼んでいる)わけだけど、Androidでは注意すべきところがある。

AndroidではいろいろなオブジェクトがContextという引数を取る。通常は現在のActivityを渡すのだが、これによりActivityが予想外に解放されなくなることがある。Activityは割と頻繁に生成/廃棄されるので(例えば縦横切り替えとか)これは問題だ。

例えば、Drawableはロード時間かかるのでアプリケーションでキャッシュしておきたくなる。ところが、DrawableはonCallbackのためにViewを参照しており、そのViewはContextとしてActivityを参照している。したがって、Drawableが生きているあいだはActivityが解放されなくなる。Homeではこれを回避するために、icon.setCallback(null)としていたりする。

こんなことにならないためには、Contextをそのスコープ外で参照しないようにする、また、アプリケーションで共通に利用するオブジェクトにはContext.getApplicationContext()やActivity.getApplication()を使って、ApplicationをContextとして渡してあげればよい。

覚えておくべきこと

  • ActivityをContextとして長期間(Activityのライフサイクルを超えて)保持してはいけない
  • 長期間保持するようなときにはApplicationをContextに使おう
  • Activityのライフサイクルを制御できないときは、Activity内では非静的な内部クラスを避ける。静的な内部クラスを使って、そのActivityへの弱い参照を使うとよい(弱い参照だけだとGCの対象になるため)
  • GCがあるからといって、メモリーリークが起こらないわけではない


Did you like this article? Share it with your friends!

Tweet
← i.LINK? I-Link? I-link?
Androidで画面の向きを高速に変更 →

2 Responses to "Androidでのメモリリーク回避"

  1. androidzaurus より:
    2009-07-04 4:51 PM

    そのエントリ、以前、ざくっと訳してみました。ご参考まで。
    http://d.hatena.ne.jp/androidzaurus/20090121/1232519066

  2. sasai より:
    2009-07-07 6:36 AM

    リンクはらせて頂きました、ありがとうございます。

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

カテゴリー

  • お知らせ
  • ソフトウェア
  • ドキュメント
  • ネットワーク
  • ハードウェア
  • 日記
  • 書評
  • 雑記

最近の投稿

  • Google Objective-Cスタイルガイド アップデート(2.24)
  • Google Objective-Cスタイルガイド アップデート(2.20)
  • コントリビュータのためのAndroidコードスタイルガイドライン 日本語版
  • Google Objective-Cスタイルガイド アップデート(2.18)
  • 市原ぞうの国

タグ

チートシート デジカメ ドキュメント ビジネス書 ランチ 図書館 子育て 小説 技術書 旅行 書評 沖縄 翻訳 自己啓発 自転車 飲み会 AJAX Android C++ CheatSheet CoryDoctorow CS4 CSS eco Emacs FeedBurner Git Google GRD2 iPhone Java JavaScript Mac MacRuby Mercurial Objective-C Photoshop PHP Plugin Ruby SproutCore StyleGuide Subversion Ubuntu WordPress
  • RSS - 投稿

© 2012 textdrop

Powered by Esplanade Theme and WordPress