問題タブ [ashmem]

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 に答える
324 参照

android - Ashmem保持ポリシー

したがって、AndroidにはPOSIX共有メモリもSysV共有メモリもありませんが、ありashmemます。これを使用して、ネイティブサブシステムのクラッシュから事後情報を収集したいと思います(ここのように)。質問-ハンドルを保持しているプロセスが停止したときに、アシュメム領域を永続化できますか?アシュメムはどこに文書化されていますか?

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

android - NDKの共有メモリ領域

ashmemネイティブコードからマッピングおよびアクセスされる共有メモリブロック(リージョン)が必要です。また、このブロックをいくつかのアプリケーションで使用したいと思います。SDKレベル7(Android 2.1)でも動作させたい

2つのルートがあります。ネイティブコードでashmemリージョンを作成できます。しかし、問題は、整数ファイル記述子を別のプロセスに渡すにはどうすればよいかということです。FileDescriptorを介してオブジェクトをマーシャリングすることはできますがParcel、生のFDの周りにオブジェクトを構築する方法はありません。整数FDの構築と取得をサポートするものもParcelFileDescriptorありますが、関連するメソッドはSDKレベル12以降でのみサポートされます。

または、を作成することもできますMemoryFileパーセルでそれを渡すための醜い方法があります。しかし、ネイティブコードに何かを持たせるために、ファイル記述子を取得するにはどうすればよいmmap()ですか?

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

android - プロバイダー クラッシュ時の Android コンテンツ プロバイダーの堅牢性

Android プラットフォーム (ICS で確認済み) では、クライアントがクエリの途中である (つまり、開いているカーソルがある) 間にコンテンツ プロバイダーが停止した場合、フレームワークは、開いているカーソルを保持しているクライアント プロセスを強制終了することを決定します。

これは、クエリを実行した後にスリープするダウンロード マネージャー クエリでこれを試したときの logcat 出力です。「スリープ」は問題を再現することでした。プロバイダーが正しい/間違ったタイミングで停止した場合、通常のユース ケースで発生することが想像できます。そして、com.android.media (downloadProvider をホストする) を kill します。

「プロバイダー com.android.providers.downloads.DownloadProvider が死にかけているプロセス android.process.media であるため、com.example (pid 12234) を強制終了します」

ActivityManagerService::removeDyingProviderLocked でこのコードを追跡しました

これはポリシーの決定ですか、それともプロバイダーが終了した後のカーソル アクセスは安全ではありませんか?

クライアント カーソルが、CP によって設定された ashmem の場所の fd を保持しているようです。これが、サーバー (プロバイダー) が停止したときに Binders のような例外をスローするのではなく、クライアントが強制終了される理由ですか?

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

android - ASHMEM に基づく SHM の置き換え

*nix から Android へのライブラリの移植に取り組んでおり、ライブラリは共有メモリまたはshm. Android には System V がありませんshm。代わりに を使用しますashmem

shm呼び出しをマップする shim ライブラリを知っている人はいashmemますか? Google はあまり役に立ちませんでした。

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

android-ndk - Cutils は NDK に含まれていませんか?

NDK プロジェクトに ashmem を実装するには、cutils ライブラリとヘッダーを使用する必要がありますが、システムで cutils に関連するものを見つけることができませんでした。それはどこにありますか、またはどこから入手できますか?

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

android - 最小限のアクセス オーバーヘッドで Java サービスとネイティブ アプリの間でバッファを共有する

Android Java サービスとネイティブ プロセスの間に共有メモリ領域を設定しようとしています。ネイティブ プロセスには Java コンポーネントがなく、純粋に C++ であり、コマンド ラインによってシェルから直接呼び出されます。

これを達成するには、ashmem とバインダーを使用できると思います。最初に ashmem_create_region を呼び出し、結果に対して mmap を呼び出し、次にバインダーを使用して結果の fd を他のプロセスに渡します。他のプロセスは fd で mmap を実行し、それによって共有領域へのアクセスを取得します。

これは 2 つの Java アプリ間で機能し、Java アプリまたはサービスとネイティブ モード プロセス間でも機能することを理解しています。

Java サービスがどのようにしてデータに効率的にアクセスできるのか疑問に思っています。このメカニズムを使用して、サイズが約 300MB のフロートのバッファーをネイティブ アプリから Java サービスにコピーしたいと考えています。Java サービスは、JNI で発生するようなオーバーヘッドなしでこのデータにアクセスする必要があります。ネイティブ プログラムが float をバッファにすばやくコピーし、Java サービスが最小限のオーバーヘッドで値にアクセスできるように、共有領域を割り当てるための最善の戦略は何ですか?

ありがとう

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

android - アプリがベンダー/アプリでより多くのネイティブ メモリを取得するのはなぜですか?

パッケージ マネージャーを使用して /data/data にインストールするのではなく、/vendor/app にアプリをインストールすると、メモリ使用量 (dalvik とネイティブもその他) に異なる動作が見られます。Android はこれらのアプリを異なる方法で扱い、 vendor で見つかったプロセスにより多くのメモリを事前に割り当てますか?

また、データベースを処理するプロセスの 1 つのネイティブ ヒープは、ベンダー/アプリにインストールすると、ほぼ横ばいである /data/data と比較して急激に増加します。

誰かがこの問題で私を助けることができますか?

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

android - dalvik-LinearAlloc、dalvik-aux-structure、dalvik-bitmap-1、dalvik-bitmap-2、dalvik-card-table、dalvik-mark-stack、dalvik-zygote のデータは何ですか?

PID で showmap コマンドを使用していますが、レポートのこの部分を理解できません。

dalvik-LinearAlloc、dalvik-aux-structure、dalvik-bitmap-1、dalvik-bitmap-2、dalvik-card-table、dalvik-mark-stack、dalvik-zygote に含まれるデータを知りたい。

これらの ashmem には数百万バイトのメモリが必要であり、これらの ashmem のサイズを縮小する方法を見つけたいと考えています。