問題タブ [android-binder]
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 - Androidのバインダーデザインパターン-プロキシ、メディエーター、ブリッジパターン?
私はCのバックグラウンドから来て、C ++に関する知識を持っています(少なくとも仮想関数、継承、コードの再利用、およびいくつかのOOPSの概念を知っています)が、それでもC ++/Javaのデザインパターンを理解するのに苦労しています。バインダーのデザインパターンだと思います。 C ++デザインパターンに基づいています(訂正してください)。それらを理解するには、UMLも理解する必要がありますか。Plzは、上記のテストソースコードとのリンクを説明または指示します。
PS:私は小林哲之によるこのブログを理解しようとし ていますが、彼とはまったく関係がありません。
android - 失敗したバインダー トランザクション テキスト ファイル
折れ線グラフをプロットできるように、96000 バイトのテキスト ファイルからいくつかのデータを読み取る必要があります。2バイトごとに読み取り、それらを2バイトに結合しようとしましたが、それぞれ6000の整数を持つ8つの配列を作成しました.しかし、言及されたエラーが発生しています!! 1、2、または3つの配列のみを使用しようとすると機能しますが、4つの配列からは機能しません
誰かが私が間違っているところを見てください。昨日のさまざまな議論を読みましたが、適切な答えが実際には見つかりませんでした。私が得たのは、それがメモリ/ヒープの問題であるということです。
ここに私のコードがあります。
ここに私のMainActivityがあります
私のLogCatは次の出力を提供します:
android - IBinder からサービス インスタンスを取得する (SyncAdapterBinder)
連絡先を同期するために使用しているサービスがあり、さらにいくつかのメソッドを追加したいと考えていました (このサービスは作成していません。拡張しているだけで、少し迷っています)。特定の状況でこれらのメソッドを呼び出すので、これらの呼び出しを行うにはサービス インスタンスが必要になります。Android Developers では、このインスタンスを取得LocalBinder
するメソッドを使用してクラスを作成していることがわかりますが、以下を使用しています。getService()
AbstractThreadedSyncAdapter
まず、このメソッドを実装するために別のサービスを作成する必要がありますか、それとも同期を行っているのと同じサービスを使用できますか? 同じものを使用できる場合、サービス インスタンスを取得するにはどうすればよいですか?
android - バインドされたサービスからハンドラーと通信する方法は?
現在、アプリが使用するプラグインから外部サービスと通信しています。
バインドされたサービスは、最終的にアクティビティを開始し、アクティビティが終了したことをメイン アプリに通知します。
問題は、サービスがローカル ブロードキャストによって通知されることです。Messengermsg.replyTo
を変数に保存したので、Handler が終了した後にアクセスできますが、Service はまだバインドされています。
実際には機能しますが、NullPointer が不可能であることを完全に確認したいので、そのアプローチはあまり好きではありません。
Messenger を変数に格納するよりも、Binder に通信するためのより良い方法はありますか?
理解を深めるためのコードを次に示します。
android - 2 つの Android バインダー プロキシ オブジェクトが等しいかどうかを確認するにはどうすればよいですか?
Androidのバインダーについて質問です。私の理解が正しければ、プロセス間で Binder を渡すことができます。サービス側には、Binder オブジェクト (元のオブジェクト) があります。クライアント側 (別のプロセス) には、AIDL データのマーシャリングを処理する BinderProxy オブジェクトがあります。
私の質問は、2 つの BinderProxy オブジェクトが等しいかどうかを確認するにはどうすればよいですか? つまり、サービス プロセスで同じ Binder オブジェクトを参照します。equals() メソッドを使用できますか? BinderProxy オブジェクトは元の Binder オブジェクトと同じメモリ アドレスを持っていますか?
ありがとう!
編集:
David Wasser のコメントへの返答:
これを行う必要がある理由を説明するのは少し複雑ですが、明確に説明できるかどうか見てみましょう --
リモート サービスは AIDL API を提供します (クライアントは onServiceConnected で IBinder を受け取ることによって取得します)。AIDL API には、とりわけ 2 つのメソッドが含まれています。
IBinder getInterface (文字列 interfaceName );
void releaseInterface (IBinder バインダー);
これは、クライアント アプリケーションがさまざまなインターフェイスのバインダーに対してリモート サービスを要求できるという考え方です。インターフェイス実装の dex コードとそのバインダーは動的にサービスに読み込まれますが、事前にはわかりません。このサービスは、インターフェイス名に基づいて、クライアント アプリが動的に読み込まれたインターフェイスのバインダーにアクセスするためのこれら 2 つの AIDL メソッドを提供します。
App1 と App2 があるとします。それぞれが 'binder1 = getInterface( "SomeInterface1" );' を行います その動的にロードされたインターフェース「SomeInterface1」のバインダーを取得します。使用後、アプリは「releaseInterface(binder1);」と言ってインターフェイス バインダーを解放します。サービスがインターフェイスの dex コードをアンロードし、クリーンアップを実行できるようにします。
ただし、 App1 と App2 の両方がインターフェイス バインダーを解放しない限り、インターフェイス dex コードをアンロードすることはできません。そのため、サービスでは、動的に読み込まれる各バインダーの参照カウントを維持します。(マップ キー{バインダー} ==> 値{参照カウント} とします)。アプリが getInterface() を実行すると、参照カウントが増加します。releaseInterface(binder1) を実行するときは、参照カウントを減らす必要があります。ただし、そのためには、binder1 がマップ内のバインダー キーと等しいかどうかを確認する必要があります。
バインダーは、サービス (元のバインダー オブジェクト) からクライアント アプリ (getInterface() によって返されるバインダー プロキシ) に渡され、再びサービスに (releaseInterface() のパラメーターとして) 渡されていることに注意してください。オリジナル??)。
App1 と App2 は、同じインターフェイス名に対して異なるバインダー オブジェクト (インターフェイスの異なる実装) を取得する可能性があります。そのため、バインダーを使用してリリースします。
これがあまり混乱していないことを願っています!助けてくれてありがとう。
カルティック
android - dumpsys meminfo を理解する
2 つの質問があります。
には
dumpsys meminfo
、 と呼ばれる番号が 1 つありLocal Binders
ます。どういう意味ですか?それは単に一種のネイティブポインターですか?また、この数が増加するのはどのような場合ですか。この数が約 1000 に増えると、アプリまたはエミュレーターでさえクラッシュすることがわかりました。native
メモリ使用量セクションには、 、、dalvik
およびの3 つの列があります。では、なぜ 2 つの部分 (と) が一緒に追加されるのでしょうか。ヒープは、Unix プロセスのデータ セクションの一部である Java ヒープを参照していませんか?total
total=native+dalvik
native
dalvik
dalvik
android - Androidフォンではなくシミュレーターで実行されているコマンド
シミュレーターで広告シェルを実行し、次のコマンドを実行しました。
しかし、Androidフォンでadbシェルを実行し、次のコマンドを実行したとき
HERE I GOT AN"CAN"T cd to BINDER というエラーが表示されました
誰が問題が何であるかを教えてもらえますか?
android - Android Binder とその可能性
Android の Binder コンポーネントに関する質問があります。エミュレーターで Android アプリを使用すると、実行中のローカル サーバー (Java で記述) によって提供されるサービスのリモート プロシージャ コールを実行できます。Binder とのプロセス間通信は、Android 以外のアプリでも機能しますか?
または、Android で RPC を実行する他の可能性を知っていますか?
android - アンドロイド - バインダー
Androidのバインダーに関する記事を読みました。この記事では、プロセスが共有メモリ内のオブジェクト参照をスワップし、マーシャリングとアンマーシャリングよりも効率的であると述べています...しかし、実際にはIPCメカニズムにマーシャリングとアンマーシャリングがあるかどうか?? 私は少し混乱しています...
誰かがバインダーメカニズムを説明したり、詳細な記事にリンクしたりできますか?
android - Android バインダーの内部
私は Android システムにいくつかの非標準のセキュリティ機能を追加するプロジェクトに取り組んでおり、Binder を適応させるにはいくつかの深刻な問題があります。
Binder System について深い知識があり、Binder が小包を転送するプロセスを「ブロック」する理由と、受信プロセスのブロックを解除する方法を知っている人はいますか?