2

大局

2 つの Android アプリケーションHostGuest. Guestでアクティビティをすぐに開くようなアクティビティを実行しようとしていHostます。Guestアプリケーションの起動はで実行される必要がありますHostが、 として実行されているように見えますGuest(つまり、ユーザーは、ゲストの面倒な作業を行っているにもかかわらず、ホストの存在をすべての意図と目的で認識しないようにする必要があります)。

この質問は、そのHostアクティビティを に属するプロセスで実行することに関するものHostです。

なぜこれをやりたいのかは、おそらくこの質問の範囲外ですが、間違いなくやりたいことです)。

私が以前に試したこと

まず、プロセスを残りのHost活動から分離するだけで十分だと考えられていました。

これを行うため<activity>に、マニフェストの要素でプロセスに名前が付けられました。

<activity android:name=".MainHostActivity" android:process="host.process" />

次の 2 つの理由から、これには問題があることが判明しました。

  • それはうまくいきましたが、複数のゲストに直面すると、非常にハックで面倒になります。
  • ユーザーがアプリを管理できるようにする標準の Android ツールが機能しません (たとえば、最近のアプリ リストからアプリをスワイプするなど)。
  • プロセス名はコンパイル時に認識されている必要があります。

android:multiprocess

AndroidManifest.xml のドキュメントを見ると、役立つと思われるこのアクティビティ属性が見つかりました。

android:multiprocess

アクティビティのインスタンスを、それを開始したコンポーネントのプロセスに起動できるかどうか (できるtrue場合とできfalseない場合)。デフォルト値は ですfalse

通常、アクティビティの新しいインスタンスは、それを定義したアプリケーションのプロセスで起動されるため、アクティビティのすべてのインスタンスが同じプロセスで実行されます。ただし、このフラグが に設定されているtrue場合、アクティビティのインスタンスは複数のプロセスで実行できるため、システムはインスタンスが使用される場所ならどこでもインスタンスを作成できます (パーミッションで許可されている場合)。

このドキュメントを読むと、これが私が探しているものである可能性があります。「アクティビティを開始できる」「アクティビティを開始したコンポーネントのプロセスに」というよりも、「アクティビティ開始された」と言った方がいいと思います。

残念ながら、そうではないようです。からの起動HostアクティビティはGuest、 によって測定されるように、常に異なるプロセスになりandroid.os.Process.myPid()ます。

私がやろうとしていることを示すダミーアプリケーションのペアを用意しました:

  • インストールしHostます。
  • インストールして実行するGuest
  • 起動されたアクティビティには、数字 (ゲストの pid) と 3 つのボタンがあります。最初の 2 つのいずれかをクリックすると、2 番目のアクティビティが起動します。2 番目のアクティビティには、最初のアクティビティと同じ番号が表示されtrueます。これは、ホストとゲストが同じプロセスで実行されていることを示しています。

残念ながら、そうではないようです。

TL;DR

さまざまなアクティビティからアクティビティを取得して、呼び出し元のアプリケーションが所有する同じプロセスで実行するにはどうすればよいですか?

android:multiprocess要素で実際に何をしactivityますか?

編集:私が望んでいるものを示す最小限の例があります。MainHostActivityがと同じ数字になったら成功ですMainGuestActivity。番号はandroid.os.Process.myPid()です。

4

2 に答える 2

0

「android:process」と「android:taskAffinity」を使用すると、同じパッケージ (アプリケーション) 内で異なるプロセスとアフィニティを使用できます。

「android:multiprocess」は、アクティビティが異なるプロセス ID を持つことを許可するかどうかを単に意味します。これは、アクティビティが別のパッケージから開始された場合ではなく、同じアプリ内でのみ機能します。

あなたは正確に何をしようとしていますか?同じコンテキストとプライベート ファイルを共有したい場合は、代わりに sharedUserId を使用する必要があります (同様に同じ証明書を使用して署名する必要があります)。

于 2013-09-16T17:20:18.810 に答える