AndroidManifest中的意图filter的操作名称不应该使用string引用吗?

最初我的AndroidManifest.xml包含一个我通过自定义动作名称到达的活动。

<activity android:label="HERE I AM" android:name="TestController"> <intent-filter> <action android:name="com.company.project.TestActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

有了这个清单startActivity(new Intent("com.company.project.TestActivity")); 开始我的活动没有任何问题。

但是我对这种编码风格不满意。 更早的时候,我被严重的时候告诉不要使用内联定义的string常量,因为它会导致维护性较差的代码。 这真的一个点。

所以首先我宣布ap ublic static final String MY_ACTION = "com.company.project.TestActivity"; 在我的App.java类(我用它),并通过这个命名的常量到达我的组件:

startActivity(new Intent(App.MY_ACTION));

这似乎好多了,但我仍然不得不保持相同的string的两个实例。 在http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name中阅读

…这也可以是对资源的引用(forms为“@ [package:] type:name”)或包含值的主题属性(forms为“?[package:] [type:] name”)这种types。

所以我猜想这个string定义JUST ONCE会很好。 我在我的strings.xml中添加了<string name="MY_ACTION">com.company.project.TestActivity</string> ,并修改了我的App:

 public class App ... public static String MY_ACTION; @Override public void onCreate() { super.onCreate(); MY_ACTION = getString(R.string.MY_ACTION); ... 

一切都还好

…直到我改变我的AndroidManifest.xml使用<action android:name="@string/MY_ACTION" />而不是<action android:name="com.company.project.TestActivity" /> 。 在这个变化之后,我的最大惊喜是应用程序在运行时崩溃,抱怨没有为我的意图findActivity。 string引用可能没有正确parsing。 🙁

也许问题是,R.string是configuration依赖…? 但是,嘿,我不能这么疯狂select这样的一个string参考,其价值可能会改变configuration! 而developer.android.com告诉我可以在操作名称中使用引用! 我在API级别6,7,8末级遇到了这种行为。这只是在android系统中的一个简单的错误? 还是我误解了一些东西?

我完全不解,请帮助我。 提前致谢。

Solutions Collecting From Web of "AndroidManifest中的意图filter的操作名称不应该使用string引用吗?"