問題タブ [android-memory]

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.

0 投票する
1 に答える
256 参照

android - アクティビティへの長期参照を避ける

私は持っていActivityます。これActivityには がListView付属BaseAdapterしています。ではonDestroy、アダプタはクラスに格納され、onCreateでは新しい に再接続されActivityます。アダプターはインターネットからデータを読み込みViewsListView. AsyncTaskアダプターから (データをロードするために) を開始できるようにするには、 LoaderManager. Activityの を使用して、からアダプタに渡しgetSupportLoaderManager()ますActivity

  1. 次は正しいですか: アダプターが保持され、に再接続されているため、最初に渡しActivitiesた古いものへの参照が常に保持され、メモリ リークが発生する可能性がありますか?Activity

  2. どうすればこれを防ぐことができますか? LoaderManagerアダプターを新しいものに付け直すたびに、新しいものにActivity交換することを考えましたActivitygetSupportLoaderManager()これは安全/一般的ですか?

  3. 一般的に、 'old' への危険な参照を見つけるにはどうすればよいActivitiesですか?

0 投票する
0 に答える
859 参照

android - AccessibilityManager を使用した Android アクティビティ リークの解決策を探しています

GT-N8000 および GT-N7000 シリーズの Android デバイスでのみ発生するメモリ リークに気付きました。そうするデバイスでは、アプリ内のすべてのアクティビティがリークされます。

これは私のコードとは無関係のようで、解読できません。

何か案が?

例: ガベージ コレクションのアクティビティを妨げている GC へのパス。活動はすでに死んでいます。(Eclipse Memory Analyzer で表示)。

0 投票する
1 に答える
90 参照

android - MAT を使用して Android のメモリ使用量を追跡する

アプリのメモリ使用量の一部が MAT の使用によるものかどうかを突き止めようとしています。

多くのヒープを保持しているように見えるビットマップへの参照がいくつかあります。それらが実際のリソースであると判断する方法はありますか? 通常、画像はアプリ内のドローアブルから取得されます。オブジェクト参照がありますが、ドリルダウンして実際にどのドローアブルがメモリを占有している可能性があるかを判断する方法がわかりません。

ここに画像の説明を入力

たとえば、1MB を超える保持ヒープと 300k を超えるロットを持つビットマップがあります。

0 投票する
0 に答える
237 参照

android - gridadapter のメモリ リークがどこで見つかりませんか? また、GC 呼び出しを回避するためにロジックを改善するにはどうすればよいですか?

GC 呼び出しのためにスクロール中に遅延が発生するため、ロジックを改善してメモリ消費を減らし、UI を高速化するにはどうすればよいですか。

私はEclipse MATを使用しており、3つの容疑者を見つけました:

問題の容疑者 1

「」によってロードされる「android.graphics.Bitmap」の 1 つのインスタンスは、500,464 (14.70%) バイトを占有します。メモリは、"" によってロードされた "byte[]" の 1 つのインスタンスに蓄積されます。

問題の容疑者 2

"" によってロードされた "java.lang.Class" の 2,906 インスタンスが 1,121,048 (32.92%) バイトを占めています。

最大のインスタンス:

問題の容疑者 3

"" によってロードされた "java.lang.String" の 8,040 インスタンスは、514,408 (15.11%) バイトを占有します。

私のアダプターコード



ログキャット

御時間ありがとうございます...

0 投票する
0 に答える
1140 参照

android - Debug.getNativeHeapFreeSize の本当の意味

次のコードを使用して、アプリのメモリ使用量をダンプします。

そして、Nexus (2011 モデル) と Galaxy Note 1 の 2 つの異なるデバイスで実行します。Galaxy Note にはメモリの問題があり、1 ~ 2 ビットマップを追加するとすぐにメモリの問題で頻繁に失敗します。

ダンプは次のとおりです:
Nexus:

ギャラクシーノート:

Debug.getNativeHeapFreeSize() 呼び出しは、nexus では 1377480.000000 を返し、galaxy では 155648.000000 のみを返すことに注意してください。そんなことがあるものか。この電話の本当の意味は何ですか?アプリによる作業を行わずに、アプリの新規インストールで両方のテストを行いました-いくつかのTextViewとボタンがほとんどない最初の画面を表示するだけです。Galaxy Note 1 のメモリ クラスは 64MB なので、その限界に達しているとは思いません。画面に多くのビットマップを追加しても、Nexus でメモリの問題はないので、メモリを使いすぎているとは思いません。

0 投票する
2 に答える
5108 参照

android-asynctask - Android コンテキストの弱参照

私のアプリのいくつかでは、いくつかのシングルトン オブジェクトを「マネージャー」として使用しています。それらを でインスタンス化し、に格納してApplication.onCreateに渡します。ApplicationContextWeakReference

一部の「マネージャーの」メソッドは、 から呼び出された後にバックグラウンド タスクを開始するため、 をメソッドActivityに渡し、をそのメソッドにも保持します (そして、 内で使用します)。その参照は、 が新しい に設定されている場合、バックグラウンドに移行するメソッドを次に呼び出すまで保持されます。ActivitycontextWeakReferenceAsyncTaskActivityWeakReferenceActivitycontext

私の質問は、ApplicationContextを に保持する必要がありますか? をそのようWeakReferenceに保持することに問題はありますActivitycontext?