大局
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()です。