2

アプリのメモリ使用量を最適化しようとしています。放送受信機やサービスから、ビットマップや静的変数まで、あらゆるものがあります。私のアプリには対処すべきメモリリークがたくさんあると思いますが、うまくいけばメモリ不足の例外が発生することはありません。

あまりにも多くのメモリ消費を回避するための最良の方法は何だろうか、常にビットマップをリサイクルする必要がありますか?一度も行ったことがないので、ブロードキャストレシーバーをアクティビティコンテキストまたはアプリケーションコンテキストに登録するのは良いことです。静的変数を使用してアクティビティからアクティビティへのデータにアクセスするのは安全ですか。アクティビティ内のすべての変数にnull値を指定する必要があります。それらはガベージコレクションすることができますか、それとも必要ではありませんか?

たくさんの質問がありますが、それが私の最初のAndroidアプリであったように、コードはいくつかの場所でひどく行われていますが、それでも複雑です。

パフォーマンスが高く、よくできたアプリのベストプラクティスは何ですか?

4

2 に答える 2

2

マニュアルで十分だと思いました:http://developer.android.com/training/best-performance.html

于 2012-12-02T18:52:50.343 に答える
2

最も重要な

メモリの最適化を探している場合、最も重要な手順は、logcatガベージコレクタに関連するメッセージを確認することです。似たようなもの:

12-01 19:12:09.138: D/dalvikvm(31828): GC_CONCURRENT freed 158K, 3% free 10259K/10503K, paused 15ms+0ms, total 19ms

最初の値はこの実行でGCによって解放された量であり、2番目の値はアプリで使用されている量であり、3番目の値はアプリに割り当てられた量です。この最後の値は、割り当てられたメモリがシステムで許可されている最大量に達し、アプリが強制終了されるまで、アプリがメモリを増やす必要があるときに大きくなります。Honey Combより多くの値が必要になる前のSDK 。これはDalvik Vm、通常はBitmapオブジェクトによって外部で使用されるメモリです。

したがって、最も重要なテストは、アプリをしばらく使用して、使用済み/割り当て済みメモリの値が安定しているか、継続的に増加しているかどうかを確認することによって行われます。

それが安定している場合は、分析が完了し、コーヒーを飲みに行くことができます:-)

それは増え続けます、そして多分あなたの記憶がどこに行くのかをチェックし始める方が良いでしょう...

何をすべきか

メモリを適切に使用するための最も基本的な適切なルールは、不要になったオブジェクトを解放(無効化)することです。これはほとんどの非静的オブジェクトに対して自動的に行われるため、主にオブジェクトに焦点を合わせ、static不要なときにnullを割り当てるようにする必要があります。

トリッキーなもの

メモリリークの最も一般的な理由は、静的オブジェクトが適切に管理されておらず、以下への参照を保持していることです。

  • コンテクスト
  • ビュー(コンテキスト(および場合によってはビットマップ)への参照を保持します)
  • スレッド(GCによって簡単に収集されない)
  • ハンドラー(コンテキストへの参照を保持します)
  • BitMap(主にHoney Combより前のバージョンで、GCはそれらを収集するのにそれほど効果的ではありませんでした)

ファイナルノート

1時間かかる場合は、PatrickDubroyがMATを使用してメモリリークを特定する方法を説明しているGoogleIO 2011の動画をご覧ください:Google I / O 2011:Androidアプリのメモリ管理

これは、アプリでメモリ調整を開始するのに本当に役立ちました。

よろしく。

于 2012-12-02T20:21:47.393 に答える