The playground

More information here

Androidのメモリリーク–識別、治療、回避

Johan Olsson Follow Apr13,2016·9min Read より良いアプリを構築するための日々の追求では、開発者としての私たちは、アプリがクラッシュしないようにするために多くのことを考慮する必要があ […]
Johan Olsson
Johan Olsson

Follow
Apr13,2016·9min Read

より良いアプリを構築するための日々の追求では、開発者としての私たちは、アプリがクラッシュしないようにするために多くのことを考慮する必要があります。 クラッシュの一般的な原因はメモリリークです。 この特定の問題は、さまざまな形で現れることがあります。 ほとんどの場合、アプリがより多くのリソースを割り当てることができず、必然的にクラッシュするまで、メモリ使用量が着実に増加します。 Javaでは、これによりOutOfMemoryExceptionがスローされることがよくあります。 まれに、リークされたクラスは、登録されたコールバックを受け取るのに十分な長さのために固執することさえあり、いくつかの本当に奇妙なバグを引き起こ他の人がコード分析に費やす時間を最小限に抑えるために、メモリリークの例、Android Studioでそれらを識別する方法、そして最も重要なのはそれらを削除する方この投稿とそのコード例の目的は、特にJavaでのメモリ管理のより深い理解を促進することです。 一般的なアーキテクチャ、スレッドの管理、実行中のHTTPリクエストの処理は、本番環境には理想的ではなく、単に作られているポイントのキャリアとし

リスナーの登録

これは実際には問題ではありませんが、さまざまなregisterメソッドの呼び出しが頻繁に表示されますが、登録されていない これらの方法は明らかに互いにバランスをとるように設計されているので、これは漏れの潜在的な原因です。 Unregisterメソッドを呼び出さないと、インスタンスはおそらく、参照されたオブジェクトが終了した後も参照を保持し、メモリのリークを開始します。 Androidでは、そのオブジェクトがactivityの場合、大量のデータを保持することが多いため、これは特に面倒です。 それがどのように見えるかをお見せしましょう。この例では、Android LocationManagerに位置情報の更新について通知させています。 これを設定するために必要なのは、システムサービス自体と更新を受信するコールバックだけです。 つまり、LocationManagerはアクティビティへの参照を保持します。 デバイスを回転させる場合は、新しいアクティビティが作成され、すでに位置の更新のために登録されている古いアクティビティに置き換わります。 システムサービスはアクティビティよりも確実に長生きするため、LocationManagerは以前のアクティビティへの参照を保持し、ガベージコレクタがその特定のアクティ デバイスを繰り返し回転させると、再利用できないアクティビティがメモリをいっぱいにし、最終的にOutOfMemoryExceptionが発生します。しかし、メモリリークを修正するには、まずそれを見つけることができなければなりません。

しかし、メモリリークを修正するには、最初にそれを見つ 幸いなことに、Android StudioにはAndroid Monitorと呼ばれるツールが組み込まれており、メモリ使用量を他のものの中で観察するために使用できます。 私たちが本当にしなければならないのは、Androidのモニターを開いて、リアルタイムで使用され、割り当てられているメモリの量を確認するためにモニDiv>

Android Studio2のAndroidモニター。0

リソース割り当ての原因となる相互作用はここに反映されるため、アプリケーションのリソース使用量を追跡するのに理想的な場所です。 メモリリークを見つけるには、メモリがリークしたと思われる時点でメモリに何が含まれているかを知る必要があります。 この特定の例では、アプリケーションを起動し、デバイスを一度回転させてから、Dump Java Heapアクション(メモリの隣、左から3番目のアイコン)を呼び出すだけ これにより、hprofファイルが生成され、アクションを呼び出した時点でのメモリスナップショットが含まれます。 数秒後、Android Studioは自動的にファイルを開き、簡単に分析できるようにメモリをきれいに視覚的に表現します。巨大なメモリヒープをどのようにナビゲートするかについては詳しく説明しません。

代わりに、私は下のスクリーンショットの右上隅にあるアナライザのタスクにあなたの注意を向けるでしょう。 上記の例で導入されたメモリリークを検出するために行う必要があるのは、漏れたアクティビティの検出をチェックし、playキーを押して漏れたアクティ

コメントを残す

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