問題タブ [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 に答える
1355 参照

android - ビットマップの使用に関連するAndroidフラグメントのメモリリーク

ピクチャーアルバムアプリを作成しようとしています。しかし、新しいフラグメントを作成すると、古いフラグメントが残り、そこに含まれるビットマップがすぐにメモリをいっぱいにして、メモリ不足エラーが発生します。

これが私がやろうとしていることです:

私には3つのカテゴリーがあるとしましょう。結婚式の写真、夏休みなど。各カテゴリをクリックした後、その横にあるフラグメントで写真を表示したいと思います。

メインビューでは、MasterDetailFlowテンプレートのFragmentActivityを使用しています(Eclipseで新しいAndroidプロジェクトを作成する場合)。つまり、基本的には、listView(ここに私のカテゴリがあります)とframelayoutを備えた1つのフラグメントがあり、他のフラグメントを配置します。

写真用のViewPagerが欲しかったので、

フレームレイアウト内(Activity onItemSelected :):

このフラグメントは、基本的にセットアップに使用されます。

一方、アダプタはgetItemメソッドに新しいPictureFragmentを作成します。

PictureFragmentは、BitmapFactoryとLruCacheを使用して画像をフェッチします。PictureFragmentとonDestroyView()にWeakReferenceをビットマップに格納します。

今問題に。1つのPagerFragment内では、すべて問題ないように見えます。PicturesFragmentsが作成され、破棄されます。メモリは制御されているようです。しかし、他のリスト要素のアクティビティをクリックすると問題が発生します。ログを見ると、ページャービュー用に2つの新しいフラグメントが作成されていることがわかります。また、onDestroyView()メソッドがPagerFragmentで呼び出されたが、PictureFragmentでは呼び出されなかったことがわかります。したがって、メモリ不足エラー。だから私は何を間違えますか?中のPicturesFragmentとビットマップを削除するにはどうすればよいですか?

手伝ってくれてありがとう

W

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

android - Android でビットマップをロードする際のメモリ不足の問題

ビットマップの読み込みに Fedor のコード (https://github.com/thest1/LazyList) を使用しています。要件に応じて、数行のコードを変更しました。ヒープ メモリがしきい値を超えると、メモリ不足エラーが発生します。同じトピックにさまざまな質問が投稿されています。それらのほとんどは、SoftReference とビットマップ recycle() を使用することを提案しています。SoftReference を使用していますが、まだ問題に直面しています。また、ビットマップリサイクルメソッドをどこで使用するかについても混乱しています。

MemoryCache.java

ImageLoader.java

Logcat出力を添付:

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

android - finish() を呼び出してもアクティビティへのメモリ参照がクリアされない

私のアプリの単純化されたバージョンには、A と B の 2 つのアクティビティがあります。アクティビティ A は B を開始し、いくつかの作業の後、B は finish() を呼び出します。ほとんどのデバイス (4.2 を実行する Galaxy Nexus、4.0.4 を実行する Droid 4、および 2.3.4 を実行する Droid 2) でメモリ アナライザー ツールを使用しても、アクティビティ B の痕跡は表示されません。

しかし、4.1.1 を実行している Samsung S3 では、次の GC ルートへのパス (弱い/ソフト参照は除外) により、MAT はアクティビティ B オブジェクトを表示します。

アクティビティ B を開始および停止するたびに、MAT はアクティビティ B のメモリ フットプリントの別のインスタンスを表示します。また、アクティビティ B を開いたり閉じたりするほど、logcat で報告されるメモリ フットプリントが大きくなります。MAT を使用して GC を強制しても、アクティビティ B メモリへの参照は削除されません。

3 つの質問があります。

  1. デバイスによってメモリ/GC の動作が異なるのはなぜですか?

  2. S3 では、OS は最終的に戻ってきて、取り残されたアクティビティ B オブジェクトを GC します (つまり、Android がクラッシュする前にクリーンアップするので、心配する必要はありません)。

  3. そうでない場合、Thread と AudioManager の参照はどこから来ているのですか?どうすればクリアできますか?

経験豊富な「リークハンター」に感謝します!

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

android - Androidアプリケーションのメモリサイズについて

ねえ、私はphone-gapフレームワークを使用してAndroidアプリケーションを開発しました。.apkファイルのメモリサイズは350kbです。インストール後、アプリケーションによるメモリの使用量は2.00mbです。インストール後のメモリ使用量を減らしたいのですが、実際はそれが要件です。グーグルサーフィンで、私は画像に取り組みました、そして、画像は必要なピクセルだけのものです。アプリケーションのメモリサイズを減らすための代替手段はありますか....事前に感謝します。

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

android - ヒープの大部分を使用しているAndroidアプリ、メモリリークの特定に成功しなかった

ヒープメモリの大部分を使用しているように見える比較的軽量のアプリがあり(私の意見では)、ガベージコレクション後に縮小しません。

EclipseMemoryAnalyzerを使用してメモリリークを特定できませんでした。このツールに関する私の知識は非常に限られています。

LogCatからのスニペット:

(これはログダンプからの小さなスニペットにすぎないことに注意してください。LogCatは、アプリ内で何をしても、ガベージコレクションメッセージを継続的に出力するようです。ただし、空きヒープの量は比較的安定しており、(私には)次のことを示しています。実際のメモリリークはありませんか?)

上記は、ボタンのスパムや向きの変更を数回行う「頻繁な使用」の結果です。私の懸念は、ヒープの約10%だけが、さらに拡張するために空いている/残っているように見えるという事実です。

参考までに、現在のフラグメントのレイアウトを表すXMLファイル(上記の出力時)は、約25個のTableRow要素で構成されるTableLayoutを内部に持つScrollViewです。おそらく、これがヒープメモリのこのような大きなホギングの原因ですか?

これはまったく心配することですか?

私のコードのいくつかを見たい場合は私に知らせてください。前もって感謝します。

アップデート:

アプリは基本的に2つのフラグメントを含む1つのアクティビティです。上記のフラグメントの1つは、ユーザーの操作に基づいて他のフラグメントと交換されます。これを典型的なメニューコンテンツアプリ(デフォルトのAndroidコンタクトアプリなど)と考えてください。左側にMenuFragment(連絡先リスト)、右側にいくつかのContentFragment(連絡先の詳細)があります。これまでのところ、UIの動作を設定することを除いて、あまり多くの機能は含まれていません。バックグラウンドでは何も起こらず、状態の保存などもありません。私は基本的に、MenuFragmentからアイテムを選択したときに正しいフラグメントが表示されること、フラグメントが起動したときに正しいレイアウトが描画されること、ユーザーが戻るボタンを押したときに正しいフラグメントが表示されることを確認することに重点を置いています。

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

android - フラグメントを再作成するときのカスタムハンドラーのメモリリーク

以下は、Fragment単純なストップウォッチを表示するために使用しているIの簡略版です。アプリはタブレット上で完全に機能しています。ただし、向きを変更するとフラグメントが新しいアクティビティで再作成される電話では、メモリリークが発生します。

EclipseMATは私にこれさえ与えます:

ただし、タブレットで実行しているときにメモリを分析すると、上記は表示されません(常に単一のアクティビティ)。

これを修正する方法についてのアイデアはありますか?問題を正しく理解していれば、理解できないかもしれませんが、電話で向きの変更が発生すると、複数のハンドラーが作成されると思います。

私の問題が理解しにくい場合は、ヒントを教えてください。もっとよく説明しようと思います。

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

android - Android でオーバーライド メソッドを実装しないとどうなりますか?

私は Android アプリを開発していますが、アクティビティのライフサイクルについては既に読みましたライフサイクルのメソッドonCreate() 、 onDestroy()などを実装しないとどうなるかわかりません.JVMはこれらのメソッドを自動的に呼び出しますか? 私は iOS に慣れており、Java への変更は私にとって独特です。メソッドを呼び出してメモリを管理したい。これらのメソッドがアプリのメモリを管理するのに役立ち、実行時にクラッシュしないことを願っています。

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

android - 利用可能なシステム RAM とバッテリー レベルを取得する方法

私は現在、本当に助けが必要なアプリに取り組んでおり、少し助けが必要な段階に来ました. わかりましたので、空きシステム メモリ/Ram の量とデバイスのバッテリー レベルを取得しようとしています。それらをアプリ アクティビティに表示したいと思います。

これが私がこれまでに持っているものです。

0 投票する
3 に答える
1533 参照

android - Android:ファイルの読み取り-OutOfMemoryの問題

ファイルからデータを読み込むアプリを作成しています。ファイルは比較的大きく(1.8 MB)、onCreateの非同期スレッドから読み取られています。アプリを初めて起動したときは、問題なく読み込まれます。ただし、戻るボタンをクリックしてから再度ロードすると、メモリが不足してクラッシュします(OutOfMemoryエラーが発生します)。

可能な限り最小量のメモリを使用したり、実行時にそのメモリを解放したりするにはどうすればよいですか?

ファイル読み取りコード(doInBackground()非同期クラスのメソッドで実行):

編集*非同期クラス:

データを整理し、各テキストファイルのデータを個別に保存する方法に基づいてファイルを分割しようとしましたが、ArrayListメモリの問題もありました。また、すべてのデータを1つの「マスター」に保存し、ArrayListその「マスター」でメソッドを呼び出して、データを適切なものに追加しましたArrayList(コピーしたらすぐに「マスター」からデータを削除/クリアします)。

メモリへの影響を合理化および削減する方法についてのアイデアはありますか?

編集**

Logcat:

ここに画像の説明を入力してください

これは、戻るボタンをクリックしてからアクティビティを再度ロードしたときからです。以下は、(詳細に)生成されるメッセージの1つにすぎません。

ここに画像の説明を入力してください