1

使用意图过滤器之间是否有任何功能差异

Intent myIntent = new Intent("com.this.that.MYACT");
myIntent.setPackage("com.this.that");

对比

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

是其中之一

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

还是根本没有区别?

TIA

4

1 回答 1

1

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

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

那只是因为com.this.that.MyActivity碰巧有一个<intent-filter>或已经特别标记自己是被导出的。默认情况下,Activity 不会被导出,并且 noIntent可用于从第三方应用程序启动它们。

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

更安全?

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

快点?

第二个速度可能略有提高,但我们会谈论每微秒startActivity(),这不值得担心。

于 2012-04-21T11:01:22.303 回答