問題タブ [android-largeheap]
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 - largeHeapを有効にしたビットマップリサイクル
オプションを有効にする前largeHeap
は、大きなビットマップを処理していましたが、アプリケーションで使用可能なメモリのほぼ全体を消費し、ナビゲーションでリサイクルして新しいものをロードすると、使用可能なほぼすべてのヒープで機能します。ただし、一部の操作でもう少しメモリが必要になると、アプリケーションがクラッシュします。そこでlargeHeap=true
、もう少しメモリを増やすことができました。
しかし、これを行うと予期しない動作がrecycle()
発生します。ビットマップのメソッドはほとんどの場合機能しないようです。58Mbのメモリで機能した(場合によってはをスローすることを超えるOutOfMemoryException
)アプリケーションは、メモリを指数関数的に消費し、成長を続けます(今のところテスト私は231Mbの割り当てられたメモリに到達しました)、予想される動作は、メモリ管理が機能し続け、アプリケーションが60Mbを超えて使用しないことです。
どうすればそれを回避できますか?または、ビットマップを効率的にリサイクルしますか?
OutOfMemoryError
編集:実際、私はデバイスに390Mbを超えるメモリを割り当てるときにそれを与えるようにしました。GC_ *ログを読むと、3.8Mbを解放したGC_FOR_ALLOCだけが時々解放されましたが、他のGC実行ではほとんど解放されなかったことがわかりました。
android - largeHeap="true" で Android テストを実行するにはどうすればよいですか?
タブレット用に作成された顧客アプリがあり、通常のヒープ以上のものを必要とするため、アプリは AndroidManifest.xml でアプリケーション タグの largeHeap="true" 属性を定義します。これはうまくいきます。
ただし、android.test.InstrumentationTestRunner と android.test.ActivityInstrumentationTestCase2 を使用してデバイスでテストを実行すると、標準ヒープを超えて使用しようとすると java.lang.OutOfMemoryError が発生します。
アプリ プロジェクトだけでなく、テスト プロジェクトの AndroidManifest.xml にも largeHeap="true" を設定してみました。
大きなヒープ サイズが設定されたエミュレータでテストを実行すると、動作します。この設定は、ラージ ヒープの制限ではなく、一般的な最大ヒープ サイズを増やします。これは回避策ですが、実際のデバイスでもテストを実行したいと考えています。
大きなヒープを持つデバイスでテストを実行する方法はありますか?
android - android:largeHeap="true" が機能しない
重複の可能性:
largeHeap=true マニフェスト タグが機能しない?
android:largeHeap="true"
マニフェスト ファイルのアプリケーション タグを挿入し、minSdk バージョンを and に設定しましたがandroid:minSdkVersion="12"
、android:targetSdkVersion="15"
機能せず、エラー メッセージが表示されます"error: no resource identifier found for attribute 'large heap' in package 'android'
どうすれば機能しますか?
android - Monodroid/Android は古いデバイスで android:largeHeap を使用します
スクロールビューに大きな画像があるため、アプリケーションで android:largeHeap を使用してメモリを増やしています。そうしないと、アプリケーションがメモリ不足の例外でクラッシュします。
私は 2 つのデバイスを持っています。1 つは Android 4.2 ジェリービーン、もう 1 つは Android 2.3 Gingerbread です。4.2 では android:largeHeap は正常に動作しますが、2.3 では使用できません。
両方のデバイスに満足する方法はありますか? 手伝ってくれてありがとう。
android - マニフェストで v3.x に LargeHeap を使用し、2.x を無視する方法はありますか?
マニフェストでAndroid:LargeHeap="true"オプションを使用して、少し余分なメモリを取得したいと思います (高解像度 1980x1200 ディスプレイで 5 MB 以上のビットマップを扱っており、すぐにさらに大きなディスプレイが期待されます。
Android でのビットマップの貧弱なメモリ処理に対処するためのすべての通常のトリックを使い果たしました (つまり、断片化されたメモリに十分な大きさの穴があるかどうかを知る方法は、クラッシュしないことを試して祈る以外にありません)。 )。メモリを最小限に抑えてクラッシュを防ぐために、最適化、トリミング、およびその他のトリックの適用にすでに数週間を費やしてきました。これは、2.x と 3.x/4.x でどの機能を実行できるかというトリックですが、すべてを 1 つのアプリに保持します。「ビットマップを最適化する方法」を指摘する必要はありません-私はすでにこれらを調べて、できることを適用しました。
LargeHeap はバージョン 2.x ではサポートされていません。また、2.x で LargeHeap オプションを必要としない低解像度の画面には別の画像を使用しています。(メモリ不足の問題もありません)。
android:minSdkVersion="8" の場合、Android:LargeHeap オプションはまったく許可されません。
3.x のシステムに条件付きで LargeHeap を含め、2.x では無視する方法はありますか? または、3.x が検出された場合、アプリケーション自体が LargeHeap を設定しようとしますか? これを行う方法が見つかりませんが、おそらくいくつかのトリックを見落としています。
また、LargeHeap がかなりひどいことも認識していますが、他のトリックが不足しています。理想的には、プログラム OnCreate で本当に必要な (そして許可されている) 場合にのみ、LargeHeap をプログラムで実行するとよいでしょう。
android - BIG Picture オブジェクトを Bitmap オブジェクト Android に変換します。
Web ビューから画像を取得しようとしていますが、「webView.capturePicture()」を呼び出すと、Picture オブジェクトが表示されます。ほとんどの場合、これで十分です。次のコードを使用してビットマップ オブジェクトに変換します。
ただし、同じ場合、作成されるビットマップは、Android がメモリ上でサポートするサイズよりも大きくなります。
したがって、メモリ内のビットマップのインスタンスなしで、Picture オブジェクトをファイル内のビットマップ オブジェクトに直接変換する方法を知る必要があります (それが解決策になると思います)。またはそれと同じです。要点は、画像オブジェクトからビットマップを作成することですが、大きすぎてできません。
PS:「 android:largeHeap="true" 」は使いたくありません。
誰かが同じ考えを持っているなら、私に知らせてください。
ありがとう