問題タブ [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 で IPC に Binder を使用する利点
Androidスタックで(セマフォ、メッセージキュー、パイプ)よりもIPCにバインダーを使用する利点は何ですか?
android - onBindとServiceは接続しますか?
リモートサービスにバインドしてから少し遅れているようです。onServiceConnectionは正常に機能します。バインディングは正常に機能します。遅延の問題があると思います。たとえば、私のアクティビティのonCreate()メソッドで、たとえば次のように言います。
mConnection onServiceConnect()がmRemoteServiceStubを正しく設定することに注意してください。
bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE); mRemoteServiceStub.doThis();
これを実行すると、接続がまだ存在しないというエラーが表示されます。ただし、mRemoteServiceStub.doThis()をonClickListenerのメソッドに入れると、完全に機能します。したがって、アクティビティonCreateの実行が終了するまで接続が確立されないか、接続の確立に遅延が発生します。
誰か知っていますか?
そして、この方法で接続が確立されるまでアプリケーションの実行を遅らせる方法はありますか?トリガーなしですぐに接続を使用できます。(私の実装は正しいです)
android - ウィジェットの更新時に失敗したバインダー トランザクション
このようにウィジェットの1つのビットマップを更新しています(ウィジェット全体は1つのImageViewのみです)
そして、いくつかのまれな状況(毎日の使用の6か月で3回発生しました)で、「!!! FAILED BINDER TRANSACTION !!!」が表示されます。次に、電話機の再起動のみがこの問題を解決します。アンインストールして再度インストールしても効果はなく、再起動するだけです。
アイコンのサイズを確認したところ、わずか 56 キロバイトであり、IPC メモリの制限内に収まっています。setImageViewBitmap(...) を削除すると、ウィジェットは再び機能しますが、ビットマップは更新されません。問題はビットマップ自体にあります。bitmal がこのように小さい場合、このバインダー トランザクションが失敗する原因は何ですか?
今のところ、アイコンを /data に保存することでこれを解決し、URI のみをウィジェットに送信しています。しかし、明らかにIPCメモリ制限に達していない場合、どこに問題があるのか を知りたいですか?
編集:私は言及するのを忘れています、それはアンドロイド2.3.5と2.3.7でも起こりました
android - ガベージコレクションを防ぐバインダー
私はメモリリークを追跡し、Androidのバインダーがどのように実装されているかについて私が真実だと思うことを確認したいと思います。この場合、それぞれ独自のプロセスでサービスとアクティビティがあります。ipcメソッドを介してアクティビティからサービスにコールバックオブジェクトを渡し、要求されたタスクでサービスが完了したときにコールバックを呼び出すことができるAIDLを作成しました。
長い間、私は疑問に思っていました。新しいコールバックオブジェクトをサービスに渡し、アクティビティにコールバックオブジェクトへのポインターを保持しない場合、ガベージコレクターが先に進んでアクティビティにコールバックを収集しないのはなぜですか。処理する?それは起こらないように思われるので、JVMは、アクティビティでコールバックをガベージコレクションするタイミングをどのように知るのでしょうか。
答えは、BinderシステムがActivityプロセスのCallbackへのポインターを保持し、Serviceプロセスの対応するCallbackオブジェクトがfinalize()メソッドを呼び出すまで、ポインターを解放するメッセージをActivityに送信することだと思います。これは正しいです?そうでない場合、それはどのように機能しますか?
私はそうだと信じており、アクティビティのコールバックが非常にメモリを大量に消費するものを指している場合、サービスのコールバックが収集されるまで収集されないという興味深い状況につながります。サービスのメモリが不足していない場合、コールバックが長期間収集されず、アクティビティにOutOfMemoryErrorが発生するまでコールバックがアクティビティに蓄積される可能性があります。
android - Androidバインダージェネレーターが失敗する
インターフェイスでAIDLファイルを定義しました。このようなもの:
Eclipseは自動的にgenフォルダーにIResplugin.javaを生成しますが、それは間違っています。これはEclipseが生成するコードです:
オブジェクトが存在しないため、行が_result = _replu.readHashMap(cl)
クラッシュします。cl
この行を手動で追加すると(クラスローダーがありません)、Eclipseは自分のバージョンを生成されたバージョンに置き換えます(これも間違っています)。
何か案は?
android - Androidリモートメソッドのデータ制限
私のアプリケーションでは、アクティビティとサービスの間でデータを渡す必要があります。どちらも異なるプロセスにあります。Googleは、インテントを最小限に(フルサイズのビットマップではなく)送信している間、渡されたデータを保持することを推奨していることを知っています。AIDLを介してサービスと通信していて、リモートメソッド呼び出しを介してデータを渡したい場合にも、同様のポリシーが適用されますか?
android - Android:bindService()のトラブル->サービスがnull
サービスをアクティビティにバインドする際に問題が発生しました。私はplaying_service==nullを取得します。何が間違っているのかわかりません。playing_serviceがnullなのはなぜですか?
MyActivityクラス:
playServiceクラス:
android - 開発者/バインダーを聞く方法は?
Androidでは、レイヤー通信もdev/binder
担当します。メッセージを聞くことはできますか?デコードする必要があることはわかっていますが、どうすればこのメッセージを取得できますか。たとえば、アプリがメッセージを送信してジオロケーションになったとします。私は自分のAndroidデバイスにもrootを持っています。
android - リモートサービスはどのようにしてバインドされたアクティビティにメッセージを送信できますか?
バウンドサービスに関するドキュメントを読みました。ここでは、アクティビティからリモート(つまり同じコンテキストではない)サービスへのメッセージを介して簡単に通信できることが示されていますが、サービスからバウンドにメッセージを送信する方法はありますか活動?たとえば、私のアクティビティは同じアプリケーションの実行中のバックグラウンドサービスにバインドされ、それにメッセージを送信し、このメッセージを受信すると、サービスはアクティビティへのメッセージで応答します。これを実装するにはどうすればよいですか。このトピックを説明するドキュメントを教えていただけますか?