暗黙的Intentを使用する場合、Androidシステムはメディエータのようなもの

Androidアプリケーションでは、他のアプリケーションとの連携に暗黙的Intentを使用することができる。

例えば、MainActivityというアクティビティが、WEBブラウザ(これもアプリケーション)を起動する場合は、次のコードを書く。

public class MainActivity extends Activity{
 @Override
 public void onCreate(){
   super.onCreate(saveInstance);
   setContentView(R.layout.main);
   
   Uri uri = Uri.parse("http://d.hatena.ne.jp/graySpace/");
   
   //Intentを生成
   Intent intent = new Intent();

  //Intentにアクション属性を持たせる
   intent.setAction(Intent.ACTION_VIEW);
  //Intentにデータを持たせる
   intent.setData(uri);
 
  //IntentをAndroidシステム(メディエータ)に送信する
   startActivity(intent);
 }
}

startActivity(intent)メソッドは、アクティビティを起動するために使用するメソッドだが、起動するアクティビティは指定していない。
それでは、起動するアクティビティの選択、選択後の起動は誰が行うのか。

それは、Androidシステムである*1
そういう意味で、Androidシステムはメディエータで、これによってアプリケーション同士、ActivityやService同士の疎結合が促進されている。

*1:Intentのaction属性やcategory属性などの条件に合致する起動対象が複数あった場合、Androidシステムは起動対象の一覧をアプリケーションのユーザに提示する。アプリケーションのユーザは、その中から起動したいものを1つ選択する。そのため、正確には、起動するアクティビティの選択を行うのはアプリケーションのユーザなのだが、システム面ではAndroidシステムが最終的な選択を行う。