アプリケーションがローカル バインダーのインスタンスを約 100 持つのは正常ですか? 数値はそこまで上昇し、最初の値まで下がることはありません。この多数のバインダーを持つシナリオはどのようなものでしょうか?
質問する
1922 次
1 に答える
2
(作成者が を使用してリストされたローカル バインダーの数について質問しているため、書き直しましたadb shell dumpsys meminfo
)。これが正常かどうかについての質問には答えられません。これまでそのコマンドを見つけたことがなかったからです。
ただし、これを引き起こす可能性のあるシナリオに関する情報を少し紹介します。
ローカル バインダーは、Android の「バインダー」カーネル IPC ドライバーが別のプロセスから関数呼び出しを受け取ることができると見なす任意のオブジェクトです。
そのようなものには以下が含まれます:
- から派生した、コード内で宣言したすべてのオブジェクト
IBinder
。Android サービスを宣言するときは、常にそのようなオブジェクトがあります。他の人のサービスを使用しているときに、そのようなオブジェクト (リスナーなど) を作成することもよくあります。 - Android フレームワーク内の同等の Java
IBinder
派生オブジェクト。システム サービスにある種のリスナーを提供する場合など、場合によってはこれが明らかな場合もあります。しかし、他の Android フレームワーク クラスにもバインダーが含まれることがよくあります。たとえば、Android ビットマップには、IBinder
さまざまなプロセスがビットマップ データをコピーせずに共有できるようにするために、その中に が含まれているような気がします。しかし、それについてはよくわかりません。 - C++ にある Android フレームワークの部分もバインダーです。例えばAndroidアプリの各プロセスは、 というグラフィックス合成エンジン(サーフェイスフリンガー)とのつながりを持っていると思います
ISurfaceComposer
。
では、なぜこんなにもバインダーが多いのかを理解するには、次のことを考えてみてください。
- 何らかの方法で、他のプロセスからのシステム イベントの通知を期待していますか? たとえば、ブロードキャスト レシーバーや、システム サービスに渡した任意の種類のリスナーなどです。
- あなた自身は
Service
s と AIDL を使用していますか? - 複雑な Android フレームワーク クラスをシステム API に渡していますか?
私の直感では、100 は異常です。特に気にする必要はないかもしれませんが、原因が分かったら教えていただきたいです。
于 2013-01-11T10:35:45.843 に答える