2016-10-20 4 views
1

目的:プラグインにUIが必要なモジュラーアプリケーションを作成します(これがキーポイントです)。私はメインアプリケーション( "サーバー")に関するすべての情報と、すべてのプラグインについて(すべては私たちによって作られる)です。 メインのAPK機能を増やすために、メインのAPKをユーザーに与え、彼に "モジュール"を取得させたいと考えています。彼は、サーバーアプリケーションに表示される「モジュールAPK」をインストールします。モジュールをクリックすると、ユーザーはモジュールのGUIを使用して対話できます。理想的には、サーバとモジュールの画面GUI上に同時に表示することです。フラグメント、サービス、UI:モジュラーアッチ

テスト1:サービスを見てください。サーバーとクライアントの間のコミュニケーションはうまくいきますが、クライアント(つまりサービス)は計算、処理などのためだけに作られているようですが、フォームと表示はできません。したがって、 "サーバー"はフォームを持ち、データを取得し、perfomアクションが結果とサーバー表示を返すサービスに送信します。アクティビティを「サービス」に含めることはできませんか?

試験2:断片。ニース、しかし、断片は "呼び出し元"と同じパッケージに含まれている必要があります。

テスト3:iFrame。私たちは、サーバーとクライアントから同時に見えるUIを持ち、2人と対話することができます。しかし、クライアントクラスは同じAPK内になければならないようです。

ありがとう

答えて

0

六角形アーキテクチャの記事を参照してください:http://alistair.cockburn.us/Hexagonal+architecture。 サービスはアクティビティを起動できますが、マニフェストで許可する必要があります。 さまざまな.apkファイル(異なるプログラム)が別々のプロセスで実行されるため、プロセス間通信(IPC):https://developer.android.com/guide/components/aidl.htmlを使用する必要があります。 私の仕事場には、さまざまなアプリをダウンロードできるプロジェクトがあります。すべてのアプリは別々のAPKです。

+0

私はサービスが活動を開始できることを知っています。しかし、目標は、UIをサービスの "内部"に置くことです。外部のものを起動しないでください。 – Peter

1

サーバーとモジュールの画面のGUIに同時に表示するのが理想的です。

Androidには、この井戸を実装する「すぐに使える」ものはありません。一番近いのはRemoteViewsですが、選択できるウィジェットのパレットが限られており、さらに制限されたイベント処理機能があります。

アクティビティを「サービス」に含めることはできませんか?

正しい。

RemoteViewsの独自のカスタムを作成することはできます。最後に、RemoteViewsは、少しのUIを構築する方法についてのParcelableの説明です。あなたのプラグインはこれをホストappに任意の数の可能なIPCオプションで渡し、ホストアプリケーションはそれをレンダリングする責任があります。

+0

プラグインがUIの「データ」を持ってメインアプリに送信し、メインアプリがUIを表示して処理する必要があることを意味しますか?それをやっている "モジュール"を持つことはできませんか? – Peter

+0

@Peter:「プラグインがUIの「データ」を持つことを意味するのですか? - 申し訳ありませんが、あなたはこれが何を意味するのか分かりません。あなたはそれをHTMLをホストに送るプラグインと考えることができます。ホストはHTMLを表示します(BTWは別のオプションです)。 ""モジュール "にしてもらえませんか?" - モジュールはUIが何であるべきかを定義することができますが、実際にそれらのウィジェットを表示させるのはホスト次第です。 – CommonsWare

+0

もうひとつの例があります:WindowsまたはMac OSで印刷する場合は、印刷をクリックしてドライバを開きます。これは、フォームを表示し、要求を処理し、データをプリンタに送信するドライバです。しかし、ドライバは、アプリケーションからデータを受信します。ユーザーの視点からは、ドライバはアプリの一部であると思われます。しかし、そうではありません。 あなたが言っているのは、Androidでは「プラグイン」が「UIコード」をアプリケーションに送信しなければならないということです。アプリケーションはこれらの「データ」がUIを表示し、それを処理する(RemoteView)。それでおしまい? Mac上のドライバと同じようにする方法はありませんか? – Peter

関連する問題