在外部应用程序中启动活动是否存在差异(并且有一种首选方法)?

时间:2012-04-21 06:45:31

标签: android android-intent

使用intent-filter

之间是否存在任何功能差异
Intent myIntent = new Intent("com.this.that.MYACT");
myIntent.setPackage("com.this.that");

VS。

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.setPackage("com.this.that");

是其中之一

  • 安全?
  • 快?
  • 其他一些优势?

或者根本没有区别?

TIA

1 个答案:

答案 0 :(得分:1)

答案是:使用“外部应用”的作者告诉您使用的任何Intent结构,或使用getLaunchIntentForPackage()上的PackageManager获取Intent适合一般启动“外部应用程序”。

  

我在两种情况下都测试了它们,并且没有看到任何行为上的差异。

这只是因为com.this.that.MyActivity碰巧有一个<intent-filter>或者特意标记了自己被导出。默认情况下,不会导出活动,也不能使用Intent从第三方应用启动它们。

此外,您的代码甚至不会编译,因为MyActivity不在您的项目中(它位于“外部应用程序”中),因此MyActivity.class不存在。编译(并成功运行)的唯一方法是,如果您的应用程序和“外部应用程序”碰巧在同一个Java包中具有相同的活动类,这是不可能的。

  

安全?

“外部应用”的作者应该使用Intent动作(您的第一个场景),因为在重构代码面前更容易保持这些一致性。如果“外部应用程序”的作者将其代码重构为子包,重命名活动类等,则第二种方法将会中断。基本上,如果您愿意,操作名称将成为活动的公共API(以及任何活动)记录的额外内容)。这就是为什么您看到Android SDK专门为其自己记录和支持的活动使用此方法。

  

快?

可能