1

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

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

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

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

だからそれは

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

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

_app = (FooApplication)this.getApplication();
FooActivity uiRef = _app.getUIReference().get();
if (uiRef != null) {
   uiRef.updateSomeDisplay();
}

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

4

1 に答える 1

0

AIDLのポイントは、プロセス間通信を可能にすることです。サービスのポイントは、バックグラウンド操作をUIスレッドとは別のプロセスで実行できるようにすることです。これにより、アプリを閉じてもバックグラウンド操作を実行し続けることができます。サービスはUIとはまったく異なるプロセスで実行されるため、AIDLが必要になります。そのため、サービスプロセスからUIプロセスのメモリにアクセスすることはできません。

于 2011-02-03T02:19:59.180 に答える