android中显式和隐式活动调用有什么区别?如果用简单的例子解释答案就会很好。
答案 0 :(得分:52)
例如:
隐式活动电话
在意图过滤器中,您可以为您的活动创建操作,以便其他应用可以通过此操作调用您的活动,如下所示:
<activity android:name=".BrowserActivitiy" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"/>
</intent-filter>
</activity>
另一种调用隐式Intent的方法如下:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
startActivity(intent);
明确的活动电话
您拨打电话,准确指出哪个活动类:
Intent intent = new Intent(this, ActivityABC.class);
i.putExtra("Value", "This value for ActivityABC");
startActivity(intent);
希望这有助于您更多地了解Android中的显式和隐式活动调用。
您可以获得有关Android Intent here
的更多详细信息答案 1 :(得分:26)
无论它包含什么,明确的意图总是传递给它的目标;不咨询过滤器。但只有当组件可以通过组件的一个过滤器
时,才会将隐式意图传递给组件答案 2 :(得分:2)
请参阅此处的意图解决方案
http://developer.android.com/guide/topics/intents/intents-filters.html
显式意图(活动)是指特定的类,通常只适用于您的包。隐式意图指的是意图过滤器,其中应用程序公开宣布他们可以处理某些类型的数据或者可以提供特定服务,例如发送电子邮件。使用隐式意图,用户选择使用哪个活动(通常是包)来处理意图,或者如果设置了默认处理程序,则启动它。
答案 3 :(得分:1)
有两种类型的意图:
明确的意图:
在我们直接在intent 中明确指定并传递目标组件名称时创建Intent对象时,这是一个明确的意图。
隐含意图:
在这种情况下,我们根据意图数据和预期的操作(如发送电子邮件,捕获照片)将评估注册组件的任务(注册通常使用我们将在后面介绍的意图过滤器完成)委托给Android ,我们通过的地图上的引脚位置等。因此, Android会自动从同一个应用程序或其他可以处理意图消息/作业的应用程序启动该组件。在这种情况下的想法是,让我们说我们必须在一个位置固定一个位置map,为此我们不必编写自己的活动来处理它。相反,只需将位置数据传递给Google地图等可以代表我们的应用完成工作的应用。
答案 4 :(得分:1)
明确意图:当您知道哪个组件可以处理您的请求时。所以你在intent中明确提到了组件名称。
Intent i = new Intent(context,DetailActivity.class); // DetailActivity.class is the component name
startActivity(i);
隐含意图:当您不知道哪个应用程序可以处理您的请求时,您在意图中提及操作,并让操作系统决定哪个应用程序/ s适合您的任务。
示例:播放音乐
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(file);
startActivity(intent);
当存在带有intent的隐式调用时,OS会取出操作,然后它使用PackageManager与所有应用程序的所有已注册活动的所有intent-filters匹配,然后将结果填充为列表。它被称为this
因此,您的设备中可能没有可以处理您请求的应用程序。在这种情况下,您将获得NullPointer异常。
因此,调用隐式意图的更安全的方法是
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
答案 5 :(得分:0)
每次在任何一次采访中我都会对这些感到困惑。因此,我将其总结为这样,可能有助于有人牢记这种差异。
摘要:
在 Implicit 意图中,用户隐式告诉系统应该做什么,而没有指定应该做什么。
在明确意图中,用户明确地告诉系统 WHOM 不管工作是什么。
答案 6 :(得分:0)
隐式意图未指定组件。意图提供组件的信息
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));
startActivity(intent);
而 明确意图指定组件。意图提供有关类的信息。
Intent i = new Intent(this, ClassB.class);
startActivity(i);