問題タブ [leakcanary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - What does the "id" mean in leakcanary
I used LeakCanary to detect memory leak and found this in the log:
But I am not sure what the id=0x12d81740
mean? is it the hash id get by
System.identityHashCode(mBitmap)
?, I have searched the code, but did not find something relative.
android - 「メモリをダンプしています。アプリがフリーズします。Brrr」でスタックします。メッセージ
LeakCanary を使用してアプリのメモリ リークを検出しようとしていますが、「メモリをダンプしています。アプリがフリーズします。Brrr.」というメッセージより先に進みません。20分ほど待ちましたが変化なし。1. Asus fonepad 8 (Android 5.0 ストック) 2. Sony Xperia SP (Android 5.1.1 CM 12.1 カスタム) 3. HTC Desire C (Android 4.4 CM 11 カスタム)
指示でアドバイスされているように、私はすべてを行いました:
android - LeakCanary によって報告された AttachInfo.mRootCallbacks によるメモリ リーク
LeakCanaryライブラリを使用して、アクティビティのメモリ リークをトラブルシューティングしています。いくつかの問題を修正した後、次の logcat 出力が得られました。
- com.MyPackage.activities.MyActivity が流出しました:
- GC ROOT com.MyPackage.MyView.mAttachInfo
- 参照 android.view.View$AttachInfo.mRootCallbacks
- 参照 android.view.ViewRootImpl.mContext
- com.MyPackage.activities.MyActivity インスタンスのリーク
- この参照の意味がわかりません。ビューはアクティビティへの参照を保持しているため、GC が実行されませんか? いつ、どのように処理すればよいですか?
- 私はEclipse メモリ分析ツールツールを使用しましたが、実際にはアクティビティのインスタンスが生きていないことがわかりました。それは理にかなっていますか?
これもカナリアの問題としてオープンしました。
編集 1: 関連する実装:
ビュー: gl レンダリングを処理する外部 jar の一部です。フラグメントへの参照があります。
私が知っていることは、私が活動を離れるときです:
- アクティビティは破棄され、アクティビティのインスタンスはもうありません。
- フラグメントが破壊されます。
- ビューは切り離されています。
では、なぜカナリア ライブラリはそれを主張するのでしょうか?リークされた参照があるのでしょうか?
ビューはいつ、どのようにコンテキストへの参照を失う必要がありますか?
java - この Observable.timer() がメモリリークを引き起こすのはなぜですか?
LeakCanaryArticleActivity
は、を介して私のリークを報告しRxComputationThreadPool-1
ます。だから、私はArticleContainerFragment.startTimer()
それを引き起こしているものとして私の方法を特定しました。私の呼び出しの作成を削除した後、Observable.timer()
メモリリークは報告されなくなりました。それでもこのタイマーを使用する必要があるので、リークが発生している理由を特定するのを手伝ってもらえますか? 私は、私が信じているすべての適切な場所で購読を解除しています.
リークの LeakCanary ログは次のとおりです。
android - LeakCanary ログの読み取り
アプリにメモリ リークがあるかどうかを確認するために、LeakCanary をインストールしました。
そのように見えますが、ログを読むことができません。誰かが方法を教えてくれるか、見つけられない良いチュートリアルを教えてください???
githubのドキュメントでは、次のように述べています。
リーク トレースを取得したら、パス内のどの参照が存在してはならないかを判断します。次に、その参照がまだ存在する理由を理解します。
しかし、私はそれを行う方法がわかりません。
送信!
これが私のログです。
android - android studio - 2 つのカスタム アプリケーション クラスを作成する方法
Android プロジェクト用に 2 つのカスタム アプリケーションを設計したいと考えています。カスタム アプリケーションは、アプリケーションを拡張するアプリケーションです。リリース ビルドにカスタム アプリケーションを追加し、デバッグ ビルドに別のアプリケーションを追加したいと考えています。LeakCanary サイトでは、「 no-op 依存関係のカスタマイズと使用」というラベルの付いたセクションでこれについて説明しています。
AndroidManifestで別のアプリケーションを宣言する方法がわかりません。現在、次のような単一のカスタム アプリケーションを使用するように設定しています。
上記のコードをデバッグ専用にするにはどうすればよいですか?
androidManifest オーバーライドは次のようになります。
別の MySecondCustomApplication をリリースするにはどうすればよいですか?
更新:gradleでbulidTypesを調べるという提案について、デバッグアプリケーションのオーバーライドのために次の構造を作成したと想像してください:
したがって、buildTypes を正しく理解していれば、リリースとデバッグの両方に使用されるメイン フォルダー (デフォルト/フォールバック) しかない場合でも、デバッグ フォルダーを指定すると、デバッグ フレーバーを実行すると、mockDebug、qaDebug のようになる可能性があります。などの場合、最初にファイルのデバッグ フォルダーを検索し、見つからない場合はメインに移動しますが、それは正しいですか?
また、マニフェストでどちらを使用するかをどのように宣言しますか? gradle ファイルはどのようになりますか?
android - コンテキストを維持する MapView v2
最新の Google マップ API から MapView を使用すると、MapView がアクティビティを保持しているため、メモリ リークが発生します。
Leak Canaryを使用しましたが、このトレースがあります
D/LeakCanary﹕ * GC ROOT com.google.android.gms.location.internal.ta
D/LeakCanary﹕ * com.google.android.gms.location.internal.sa を参照
D/LeakCanary﹕ * com.google.maps.api.android.lib6.dvc を参照
D/LeakCanary﹕ * com.google.maps.api.android.lib6.d.aj.b を参照
D/LeakCanary﹕ * com.google.maps.api.android.lib6.gmm6.cpa を参照
D/LeakCanary﹕ * com.google.maps.api.android.lib6.gmm6.cymParent を参照
D/LeakCanary﹕ * android.widget.FrameLayout.mParent を参照
D/LeakCanary﹕ * com.google.android.gms.maps.MapView.mContext を参照
D/LeakCanary﹕ * com.myapp.activities.main.AttractionDetailActivity インスタンスのリーク
誰もこれを見たことがありますか?
android - サーバーにleakcaneryトレースを送信する
しばらくの間、leakcanery を使用していますが、問題なく動作します。問題は、さまざまなデバイスでアプリの 1 つをテストした後、これまでに見たことのないリークがいくつか表示されたため、製品版でもleakcanery を有効にするか、サーバーへのリークのトレースを有効にすることにしました。3つの質問
1 - パフォーマンスが低下しますか?! 時々、leakcanery がデバッグ モードで遅延を引き起こすことがあるので、製品版で有効にすると。同じラグが発生しますか?
2 - ヒープファイルをサーバーに送信する方法に関するドキュメントを読みましたが、通常、leakcanery が示すように、代わりにトレースを送信する方法はありますか。ヒープファイルを取得したときに分析したくありません。では、このファイルを送信する前に解析して、意味のあるものにするにはどうすればよいでしょうか?
3- 私は最もばかげた質問かもしれませんが、製品版でリークキャナリーを有効にするにはどうすればよいですか? デフォルトで有効になっていますか、それともどのように設定する必要がありますか?