問題タブ [aidl]

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 投票する
2 に答える
279 参照

android - Java から AIDL へのユーティリティ

AIDL 経由で公開したい既存の Java インターフェースがあります。Java から AIDL を自動生成する方法はありますか?

私は Corba コードの Java2IDL を認識しているので、これはそれに似たものになります。

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

android - AIDL で ResultReceiver を使用する方法

独自のコールバック インターフェイスを作成する代わりに、ResultReceiver を使用して AIDL で非同期サービス API を宣言したいと考えています。

しかし、android.os.ResultReceiver をインポートしようとすると、ResultReceiver がパーセル可能であることがわかりません。トリックはありますか?

例:

結果 (Android 2.2):

プロジェクト内の src/android/os に ResultReceiver.aidl を作成すると、次のようになります。

それは機能しますが、それはそのようなハックのようです。より良い方法はありますか?

ありがとう、エリック

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

android - 2つのアプリケーション間のAIDLインターフェース

私はAIDLインターフェースで壁全体を突き刺しました。サードパーティのアプリケーションを介して制御する必要のあるアプリがあります(これを十分に制御できるので、必要なものをアクティビティに実装するように依頼できます)

もともと私のアプリはインターフェースとすべてを備えたアクティビティでしたが、バックグラウンドサービスに変更し、テストのために、サービスアプリをバックグラウンドで開始するためのダミーアプリを作成しました。

ここで、サービスからのメソッド呼び出しを要求する方法が必要です(主に、start、stop、sendData)。両方のアプリの.aidlファイルを作成しました。aidlファイルは1つのメソッドのみを実装します(これは、ここでの他の質問の礼儀です)。

パッケージが「foo.otherapp」であることを除いて、他の援助は同じです。私がオンラインで見つけた実装には、両方のaidlファイルに対して同じパッケージがありましたが、これはエラーを引き起こします(名前空間とパッケージが嫌いなので、これは私の側の問題だと思います。それらを変更します、私はそれを行うことができます)

計画では、このメソッドを使用して文字列をサービスに送信し、事前定義された文字列を切り替えて正しいメソッドを呼び出すだけでした(使用法が改善されれば、3つの異なるメソッドを実装することもできます)。

とにかく...エイドルを接続できません。「サービスインテントを開始できません」というエラーが表示されます。

{act = foo.testapp.IScript}:見つかりません

私はこの推測が私の誤解と関係があると思います。パッケージ名など)

これは私のテストアクティビティアプリでの実装です

次に、OnCreate()メソッドでこれを行います。

サービスクラスではこれがあります。

そして最後にマニフェストファイル。

実際、エイドルを扱うときにマニフェストファイルに何かを追加する必要があるかどうかはわかりません。一例では、これを見ました。

エラーはどこにでもあると思います。私はこれをチューインガムとバンドエイドでセットアップしようとしてきました。私はこれのいくつかの基本的な概念を誤解したと思います。

とにかく、どんな助けでも大歓迎です。

前もって感謝します!

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

android - ウィジェット/ローカル サービスから Android リモート サービス (IPC) を呼び出すには?

ウィジェットからライブ壁紙をリモート コントロールしようとしています。それらは同じ APK にありますが、明らかに異なるプロセスです。ライブ壁紙の「アクティビティ」を呼び出すことは、別のプロセスであるため、ほとんど役に立ちません。ウィジェットにはシンプルなボタンがあり、押すと、

だから私が必要としているのは(私が思うに)IPCとAIDLです。

まず、壁紙側で AIDL を作成しましたが、うまくいきました。追加のパラメーターのない 3 つのメソッドがあります。しかし、クライアント側をウィジェットに追加すると、ウィジェットが既に BroadcastListener であるため、そのリモート インターフェイスにバインドできないというエラーが表示されました。Widget を BroadcastListener にすることなくボタン処理を取得しようとしましたが、それは不可能のようです。

問題ありませんよね?ウィジェットは BroadcastListener ですが、サービスはそうではなく、すべて問題ないため、リモート インターフェイスにバインドするウィジェット内にサービスを作成しました。

とか、そう思いました。

さて、ウィジェット サービスをトリガーするウィジェットのボタンを取得しています。リモート サービスにバインドすると、次の警告が表示されます。

サービスを開始できません インテント (act=com.blabla.IRemoteService): 見つかりません。

リモートのものにバインドするために、ウィジェットのサービス内で getApplicationContext() を使用しています。マニフェストにウィジェット サービスはありますが、リモート サービスはありません。そこに入れると、不特定の InstantiationException が発生します。

ウィジェットのサービス onStart() で、私はこれをやっています:

私も持っています...

私の質問は次のとおりです。ウィジェットから別のアプリケーションへのリモート呼び出しに成功した人はいますか? ここでライブ壁紙について話していることと、ウィジェット プロセス内でアクティビティを呼び出すことには関心がないが、ライブ壁紙内で関数呼び出しを行うことに興味があるという事実を考慮すると、IPC 以外にどのようなオプションがありますか?

そして、IPCがここに行く方法である場合、私は何を間違っていますか?

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

android - AIDL インターフェイス パラメータ値の「In/out/inout」?

私はラジオストリーミングアプリをプログラミングしています。AIDLインターフェース技術を使用してサービスと通信することにより、「ラジオ再生」をリモートサービスとして実行します。しかし、私は1つのことを本当に理解していません。

AIDL インターフェイス パラメータ値の「out」とは何ですか?

このような:

メソッドがアクティビティから呼び出されたときにリモートにデータを送信する「in」を理解しています。

「アウト」とは何ですか?なぜ同じメソッドで「イン」と「アウト」が必要なのですか? それら(「アウト/インアウト」)はどの場合に使用されますか? なぜString[]「アウト」なのですか?

助けてください..

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

android - メモリリークを追跡する方法-生きている参照を見つける

私はかなり複雑なアプリを持っています-

UIアクティビティは、サービスを起動し、2ウェイAIDLコールバックを設定して、2つが通信できるようにします。

サービスは永久に実行されます(UIアクティビティの[オフ]ボタンを押さない限り)。

問題は、ユーザーがアクティビティを終了するときに、アクティビティメモリが解放されないことです。-UIアクティビティを閉じても、アプリで使用されるメモリの量は同じです。-UIアクティビティが閉じられている場合でも、ヒープにはmapTilesやその他のUIがらくたが表示されます。

だから私の推測では、サービスはどういうわけかアクティビティへの参照を保持しています。アクティビティコンテキストのリークについて警告する多くの記事を知っています。サービスは、アプリケーションスコープに格納されている弱参照を介してのみアクティビティを参照します。(アプリケーションを拡張するクラス)

アクティビティを具体的に参照しているものを見つける方法はありますか?ドミネーターツリーには、すべてのメモリを消費しているmapTilesとListViewのレイアウトが表示されます...しかし、そのようなものを存続させているアクティビティへの参照が見つかりません。

また、OutOfMemoryExceptionが発生した場合にHPROFヒープダンプをダンプする方法はありますか?

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

android - Android Couchdb - libcouch と IPC Aidl サービス

私はAndroidでネイティブのCouchdDBアプリに取り組んでいます。ちょうど今週、CouchOne が libcouch をリリースしました。これは、「Android で CouchDB と対話するために必要なライブラリ ファイル」と説明されています

これは、CouchDB サービス (以前にインストールされていた場合は CouchDB に付属) をバインドできない場合に CouchDB をインストールする基本的なアプリです。

より正確に言うと、私が理解しているように、libcouch は、CouchDB から IPC サービスにバインドしようとすることで、デバイス上の CouchDb の存在を推定し、そのサービスを介して CouchDB と通信したいと考えています。

これを確認するには、CouchAppLauncher.class のメソッド「attemptLaunch()」を参照してください。

パブリックボイドの試み(){

これについて私が持っている質問は次のとおりです: libcouch は、以前にインストールされた CouchDB を「見つける」ことができません。常にマーケットから CouchDB をインストールしようとします。これは、実際には CouchDBService にバインドできないためです。AIDL によって生成されたサービス インターフェイスの目的を理解しているので、その IPC を他のアプリケーションに提供しようとする実際のサービスは、AIDL を利用する必要があります。この場合、AIDL は、リモート サービス (この場合は libcouch) にバインドしようとしているアプリケーションに移動されています。

コミットを確認すると、AIDL ファイルがそのリポジトリから libcouch に移動されました。

完全なリンクについては、Android CouchDB ソースへのリンクを次に示します: github.com/couchone/libcouch-android

さて、私の調査結果は完全に間違っている可能性があります。何かが欠けているのはlincouchのマニフェストである可能性もありますが、いくつかの答えが得られることを本当に楽しみにしています!

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

service - AIDL-ポイントは何ですか?

さて、アクティビティ(UI)とサービス(バックグラウンドポーリング)を備えたAndroidアプリがあります。この2つは、AIDLを使用して複雑に接続されています(コールバックを含むため、二重通信、IPCなど)。

二人の話はいつでも私はそれを使っています。

ただし、Applicationクラスも拡張して、2つが共通のデータオブジェクトを共有できるようにしました。したがって、アプリケーションは、サービスが常に使用しているUserオブジェクトを保持し、アクティビティは実行中にそのオブジェクトにアクセスすることもできます。

ユーザーがUIの更新をトリガーすることがあるため、アプリケーションにはアクティビティへの弱参照もあります(コンテキストリークを回避するため)。

だからそれは

Activity (UI) ---> Application <--- Service

を行うことで、サービス内でUIイベントをトリガーできます

だから私はそれを理解していません。UIを弱参照し、UIが存在するかどうかを確認し、そのメソッドを呼び出すだけで、複雑なAIDL呼び出しに煩わされるのはなぜですか。

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

java - aidl インターフェイスを介して列挙型を渡す

列挙型はプリミティブ型ではないため、Android の aidl インターフェイスを介して列挙型を渡す最も効果的な方法は何ですか? 最初に列挙型を序数に変換する方法はありますか?

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

android - Android リモート メソッド (AIDL) とインテント - パフォーマンスとバッテリー使用量

私のチームは、(同じ電話で) データを交換する複数の Android アプリケーションで構成される Android プロジェクトに取り組んでいます。アイデアは、いくつかのデータを収集し、このデータをメインアプリケーションに送信するいくつかのアプリケーションを持つことです。ここでの主な課題は、CPU 負荷とバッテリー使用量の観点から、交換をできるだけ安く行うことです。

私の知る限り、プロセス間通信を実現するには 2 つの方法があります。

  1. インテントとアクティビティ - あるアクティビティが別のアクティビティのインテントをキャッチ
  2. リモート メソッド (AIDL 経由)

次のシナリオでは、どちらがより効率的か疑問に思います。

  1. 非常に頻繁なメッセージ/メソッド呼び出しで、送信されるデータ/トラフィックが非常に少ない (例: 一連のプリミティブを渡すだけ)
  2. トラフィック チャンクが大きく、メッセージ/メソッド呼び出しの頻度が低い (例: データを収集し、定期的に数 KB/MB のデータを送信する)
  3. 大きなデータ チャンクが交換される非常に頻繁なメッセージ/メソッド呼び出し

比較またはベンチマークへの参照/リンクのいずれかの点で、助けていただければ幸いです。