返回

从两颗树看显式 Intent 与隐式 Intent

Android

这两者之间的比较就像两棵树——显示 Intent 是果树,隐式 Intent 是针叶树。

果树的果实是显而易见的,就像显示 Intent 的目标组件是显式指定的。针叶树的果实是隐藏的,就像隐式 Intent 的目标组件是通过操作和类别来隐式指定的。

果树的果实可以吃,就像显示 Intent 可以直接启动目标组件。针叶树的果实不能吃,就像隐式 Intent 不能直接启动目标组件,它需要系统来查找能够处理操作的组件。

果树的果实有不同的形状和颜色,就像显示 Intent 可以启动不同的目标组件。针叶树的果实形状和颜色都相似,就像隐式 Intent 启动的目标组件的功能都是相似的。

果树的果实可以保存很长时间,就像显示 Intent 可以长期存在。针叶树的果实只能保存很短的时间,就像隐式 Intent 只在需要时才存在。

显式 Intent 和隐式 Intent 都是 Android 开发中非常重要的概念,了解它们之间的区别可以帮助我们更好地使用它们来开发出更强大的应用程序。

显式 Intent 和隐式 Intent 都可以用于启动其他组件,但它们的使用方式不同。

  • 显式 Intent 用于启动特定组件。要使用显式 Intent,您需要知道要启动的组件的类名。例如,如果您想要启动一个名为 MyActivity 的活动,则可以创建以下显式 Intent:
Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);
  • 隐式 Intent 用于启动可以处理特定操作的组件。要使用隐式 Intent,您需要知道要执行的操作的名称。例如,如果您想要启动一个可以拨打电话的组件,则可以创建以下隐式 Intent:
Intent intent = new Intent(Intent.ACTION_DIAL);
startActivity(intent);

隐式 Intent 的一个优点是它可以启动多个组件。例如,如果您想要启动一个可以拨打电话的组件,您可以使用以下隐式 Intent:

Intent intent = new Intent(Intent.ACTION_DIAL);
List<ResolveInfo> activities = getPackageManager().queryIntentActivities(intent, 0);
for (ResolveInfo info : activities) {
  Intent newIntent = new Intent(intent);
  newIntent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
  startActivity(newIntent);
}

这将启动所有可以拨打电话的组件。

隐式 Intent 的另一个优点是它可以用于启动未知的组件。例如,如果您想要启动一个可以处理特定文件类型的组件,则可以创建以下隐式 Intent:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "image/*");
startActivity(intent);

这将启动所有可以处理图像文件的组件。

显式 Intent 和隐式 Intent 都可以用于启动其他组件,但它们的使用方式不同。显式 Intent 用于启动特定组件,而隐式 Intent 用于启动可以处理特定操作的组件。