問題タブ [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 Java とネイティブ プロセスの間にすばやく簡単な IPC メカニズムはありますか?
そんな要望があります。Android ネイティブ サービス プロセスでは、何らかの処理を行い、データを一定の速度 (つまり 30/秒) で Java レイヤーに送信します。アプリ層では、これらのデータを受け取り、それに応じた操作を行う必要があります。ネイティブ サービスとアプリは 2 つの異なるプロセスにあるため、できるだけ迅速に行う必要があります。
バインダーが私の問題を解決するかもしれないことは知っていますが、実装は重いです。私の要件を満たす迅速で簡単な IPC メカニズムはありますか? サンプルコードを用意してください。ありがとう。
android - Androidではバインダーを強制的に死なせることはできますか?
リモート プロセスに送信している Binder があります。そのリモート プロセスはlinkToDeath
、Binder が停止したときに監視するために使用します。リモート プロセスは、プロセスがクラッシュしたときにコールバックを取得しますが、クラッシュせずに Binder を所有する側でプログラムで Binder の死をトリガーする方法はありますか?
android - Android Bound Services: この IBinder インスタンスを IBinder インスタンスにキャストするのはなぜですか?
Bound Servicesの開発者向けドキュメントでは、「バインドされたサービスの作成」の「Binder クラスの拡張」について、次のコード例が示されています。次のコード スニペット (無関係なビットを削除しました) は、メソッドから をService
返します 。IBinder
onBind()
次に、クライアントで、 のメソッドでmBinder
オブジェクト ( のインスタンスLocalBinder
)を受け取ります。私の質問は、 toとして渡された のインスタンスをステートメントのインスタンスにキャストしようとするのはなぜですか?onServiceConnected()
ServiceConnection
LocalBinder
argument
onServiceConnected()
LocalBinder
LocalBinder binder = (LocalBinder) service;
android - Android: Messenger が Handler と通信するために IBinder が必要なのはなぜですか?
このページに示されているコードの 3 番目のスニペットのコンテキストで話すと、関連する と通信するために使用されているを返す名前Messenger
付きgetBinder()
のメソッドがあります。IBinder
Messenger
Handler
では、が への参照であり、両方が同じ で作成されている場合に、 がHandlerと通信するためにが必要になるのはなぜでしょうか?IBinder
Messenger
Messenger
Handler
class
java - IBinder と Binder の間の型キャストが違法ではないのはなぜですか?
注: IBinder および Binder を使用した型キャストに関する質問を見つけましたが、それらは問題の修正に焦点を当てています。私の問題は、キャストがそもそも違法ではない理由を理解することです。BlueJ でも置換クラスを使用して同じ操作を試みましたが、同じ構造を使用しているため、実行時に失敗します。
これは、違法であると思われるキャストを含むコードです。
IBinder (サービス変数) の親クラス変数を IBinder のサブクラスの型付き変数 (つまり、LocalService.LocalBinder 'binder' variabke) に割り当ててから、IBinder をそのサブクラスにダウン キャストすることは違法であると考えました。
つまり、一般的な構文では、これは違法であると考えました。 Child = (Child) variableOfTypeParent; //これはコンパイラを通過しますが、実行時にクラス キャスト例外を取得します。
私はこれが合法であることを理解していますが: Child = (Child) variableOfTypeParentAssigned2Child; //しかし、ここではそうではありません。
うまくいけば、ここの優れた頭脳が私に骨を投げてくれるか、この種のキャスティングについてどこで読むことができるかを教えてくれます.
編集:BlueJからの私のコードは次のとおりです:
android - リモート サービスを使用しない Android AIDL
リモートサービスを実装せずに AIDL を実装することは可能ですか? Google Play サービスを調査した結果、いくつかの AIDL 呼び出しが次の方法で実行されていることに気付きました
次の方法でリモート コンテキストを取得します。
/li>クラスローダーを取得し、IBinder を実装するクラスをロードする
/li>
そして、私たちはそれと通信することができます!
なぜこれが許可され、なぜ反対側にサービスがないのだろうか? データ全体はどこに保存されますか? この呼び出しは新しいプロセスを開始しますか?
android - ユーザー空間アプリケーションは、Android のハードウェア (ロケーション/ネットワーク/Wifi) をどのように制御しますか?
私は、Android の BINDER IPC メカニズムの背後にあるソフトウェア アーキテクチャを理解しようとしているものをすべて読んでいます。私が理解していることから、BINDER はカーネル空間に位置し、プロセス間でメッセージを中継できる共有メモリの割り当てをユーザー空間アプリケーションに一時的に与えます。
私が理解を失い始めたのは、実際の実装がどのように機能するか、特にパーセルに関連する部分です。
ネットで調べていたところ、Network/Wifi/Notificaiton/Battery など ( Docs ) など、Android が提供する任意のサービスの実装を見つけました。私の読書から、ユーザー空間プログラムはサービスクラス自体をインスタンス化するのではなく、サービスクラスへの参照を取得する必要があることを学びました. そのため、これは、Androidが既にサービスを実行している、または少なくとも必要なときにそれを開始するためのリソースを持っていることを示す間接的な方法として受けとめました。実装は基本的に次のようにレイアウトされました。Context.getSystemService(Context.X)
Battery.class
最初は単純に思えます: ユーザーが次のようなことをすると:
次に、user's
インスタンスは BINDER メカニズムを使用してsystem's
実際のサービス コントローラーと通信します (同じクラスのインスタンスはどれですか? )。ただし、上記のコードはシステムのバッテリー監視サービスの実装であり、BINDER データを実際に受信しているのは誰でしょうか?
TL;DR : 1000 行のコードを 10 行に凝縮しようとしたため、これがすべて非常に紛らわしい場合、要約は次のとおりです。ユーザーがネットワーク/Wifi などのハードウェアの状態を制御しようとするとき/Location/Notifications(タッチスクリーン) - Android 内で実際に何が起こっているのか、これらの抽象化されたサービスに関連付けられたハードウェアを実際に制御しているのは誰なのか?
注: 上記のコードは完全に捏造されたものであり、一般的な構造のみを示すことを目的としています。