0

Android 開発者の皆様、こんにちは。

メモリ内キャッシュを実装する方法を見つけようとしています。ただし、そのサイズは dvm ヒープ サイズと比較すると比較的大きくなります。nio および/または Parcel クラスを使用してオブジェクトをシリアル化し、ネイティブ メモリに格納することを計画していました。ただし、実際にそれらのオブジェクトをバイトから再構築するパフォーマンスを予測することはできません。さらに、Parcel と Parcelable を使用してカスタムのシリアル化を行う方法を教えてくれる有用なものは見つかりませんでした。AndroidのIPC用であることは知っています。また、Binder プロトコルの内部構造を理解するために Parcel.cpp を調べても、これほど魅力的で実現可能なものはありませんでした。一方、dvm ヒープ サイズの制限により、LRUCache クラスを使用することはできません。つまり、Java オブジェクトをそのまま dvm ヒープに格納することはできません。

最終的には c/c++ インスタンスを Java 側に渡す必要があるため、現時点では NDK がキャッシュを実装するのを避けようとしています。

簡単に言うと、dvm ヒープ サイズの制限を超えて高速に実行できるメモリ内キャッシュを実装するための最良の方法を教えてくれる開発者はいますか? または、少なくとも、リンク、PDF、電子ブック、ドキュメントなどを送っていただければ、チェックアウトできます。それは本当に素晴らしいでしょう!

ありがとう、イルカー・グルカン

4

1 に答える 1

0

ActivityManager の MemoryClass 情報を使用します。

現在のデバイスのおおよそのアプリケーションごとのメモリ クラスを返します。これにより、システム全体が最適に機能するために、アプリケーションに課すメモリ制限の厳しさがわかります。戻り値はメガバイト単位です。ベースラインの Android メモリ クラスは 16 です (これはたまたま、これらのデバイスの Java ヒープ制限です)。より多くのメモリを搭載した一部のデバイスは、24 またはそれ以上の数値を返す場合があります。

したがって、たとえば、使用可能なメモリを 8 で割り、メモリ キャッシュを構築できます。

ActivityManager activityManager = (ActivityManager)context.getSystemService(Activity.ACTIVITY_SERVICE);
int memoryClass = activityManager.getMemoryClass();
int memCacheSize = memoryClass / 8 * 1024 * 1024; // bytes
于 2012-07-28T09:05:22.427 に答える