インテント フィルタ
インテント フィルタは、システムが解決しようとしているインテントを受け取ることができるインストール済みのアプリケーション コンポーネントを見つけようとするために、システムによって使用されます。つまり、インテントが対象となる特定のコンポーネント クラスを指定していない場合です。例えばこんなことをしたら…
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
システムには、開始するアクティビティ (またはサービス、または BroadcastReceiver) を明示的に示すものはありません。Intent を解決できるいくつかのコンポーネントを見つける必要があり、宣言された<intent-filter>
s を使用してこれを行います。通常、画像をキャプチャできるアプリ (カメラ アプリなど) は、そのアクティビティがこのアクションを処理することを宣言します。
アプリのランチャー アイコンをクリックすると、ランチャーは基本的に次のようなインテントを作成します。
Intent mainIntent = new Intent(Intent.ACTION_MAIN);
mainIntent.setCategory(Intent.CATEGORY_LAUNCHER);
mainIntent.setPackage(/* your package */);
startActivity(mainIntent);
その結果、システムはおよび<intent-filter>
を指定する でそのパッケージ内のコンポーネントを見つけようとします。<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER">
要するに、public static void main()
Java の典型的な存在とはまったく関係ありません。
XML
システムが実行時に XML ファイル (レイアウト ファイルなど) をロードすると、ファイルを解析して見つけた情報に基づいて、実際に Java オブジェクトが作成されます。例としてレイアウトを使用すると、すべての異なる XML タグ ( など<ImageView>
) に対応する Java クラス ( android.widget.ImageView
) があり、XML 属性で設定できるほとんどのプロパティは、これらのビューの public メソッドを使用して設定することもできます。
あなたがそうしたいと思っているなら、自分でインスタンス化してset[Property]()
メソッドを使用することで、Activity のレイアウトを完全に Java で構築することができます。これは基本的にシステムが行っていることです。
public void onCreate(Bundle saved) {
super.onCreate(saved);
LinearLayout layout = new LinearLayout(this);
layout.setPadding(20, 20, 20, 20);
layout.setOrientation(LinearLayout.VERTICAL);
TextView text = new TextView(this);
text.setTextSize(18);
text.setTextColor(Color.MAGENTA);
text.setText(R.string.hello_world);
layout.addView(text, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
setContentView(layout);
}
XML ドローアブルでも同様のことが起こりますが、Java でドローアブルを作成する場合はかなり異なります。
つまり、XML で実行できることの多くは Java でも実行できますが、欠点もあります (たとえば、OS が提供する自動リソース処理が失われます)。