2

AIDLのinoutパラメータが何のためにあるのか知りたいですか?

私は何が入っているのか、何が出ているのかを知っています。(outは、通過するオブジェクトをマーシャリングしません)。

しかし、私は何のためのインアウトなのか理解していません。

AIDLインターフェースのパラメーター値の「In/out / inout」を調べました か? 質問がまだ理解していませんでした。

私のテストから、パラメータはのように指定するのと同じように渡されます。

したがって、any1が何が入っていないかを明らかにすることができれば、それは役に立ちます。

ありがとう

4

2 に答える 2

5

inパラメータは、呼び出し元から呼び出し先にのみ転送されます。outパラメータは、呼び出し先から呼び出し元に転送されます。そして、inoutパラメータは双方向に転送されます。

inoutオブジェクトを呼び出し先に渡し、呼び出し先がそれを変更するときに、パラメーターを使用します。

于 2013-01-20T16:59:11.710 に答える
0

これが、AIDLの方向タグを説明する私のバージョンです。

  • データがどちらの方向に進むかを示す唯一の方向タグ。
    • in-オブジェクトはクライアントからサービスに転送され、入力にのみ使用されます
    • out-オブジェクトはクライアントからサービスに転送され、出力にのみ使用されます。
    • inout-オブジェクトは、クライアントから入力と出力の両方に使用されるサービスに転送されます。
  • すべての非プリミティブパラメータには、データがどちらの方向に進むかを示す方向タグが必要です。イン、アウト、またはインアウトのいずれか。

  • プリミティブはデフォルト含まれていますが、それ以外の場合はできません。

  • クライアントからのRPC呼び出しは同期的であることに注意してください。
  • マーシャリングパラメータは高価であるため、方向を本当に必要なものに制限する必要があります。

:以下のAIDLインターフェースを確認して、より良い方法で理解してください。

package com.hardian.sample.aidl;
import com.hardian.sample.aidl.TeamMember;

interface ITeamManageService {
void getTeamCaptian(out TeamMember member);
void updateTeamMember(inout TeamMember member, in boolean isLeader);
oneway void removeTeamMember(in TeamMember member);
}

ここでは、データがどちらの方向に進むかを示すために、inout方向タグを使用しました

  1. getTeamCaptian(out TeamMember member):チームのキャプテンを取得します。ここで、「out」方向タグは、クライアントがこのメソッドを呼び出すときに、「member」オブジェクトに関連データがないことを意味しますが、サーバーは「member」オブジェクトに変更を加えるため、クライアントは更新された「member」オブジェクトを取得する必要があります。実際、メソッド呼び出しは同期です。

  2. updateTeamMember(inout TeamMember member、in boolean isLeader):チームのキャプテンを更新します。ここで、「inout」方向タグは、クライアントがこのメソッドを呼び出すときに、「member」オブジェクトに関連データが含まれていることを意味します。そして、サーバーは入力データを使用して処理する必要があります。プロセスが完了すると、クライアントは関連するデータを取り戻す必要があります。実際、メソッド呼び出しは同期です。

  3. removeTeamMember(TeamMemberメンバー内) チームからメンバーを削除します。ここで、「in」方向タグは、「メンバー」オブジェクトがクライアントからサービスに転送され、入力にのみ使用されることを意味します。サービスの「メンバー」オブジェクトに変更が加えられた場合、それはクライアントに反映されません。メソッド呼び出しは非同期です。メソッドシグネチャに「 oneway」キーワードを付けることができます。非同期メソッドには「out」および「inout」引数を含めることはできません。また、voidを返す必要があります。

于 2019-04-12T14:44:34.360 に答える