大局
2 つの Android アプリケーションHost
とGuest
. 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()
です。