我正在查看一些lint错误,并注意到有两种方法可以转换活动。
根据我从各种互联网资源中学到的知识,我一直在为我的清单中的每个活动分配一个带有操作名称的intent-filter,然后调用它来进行该活动。
然而,这给了我:“导出的活动不需要许可”lint错误。有人说这可能是一个奇怪的问题,最好通过引用活动类去(使用startActivity()方法)。通过调用活动的类而不是意图过滤器。
谁能证明哪种方式更好?然而,似乎没有提示皮棉错误的方式会更好......
谢谢!
答案 0 :(得分:3)
建议的方法是Activity
不应在清单中注册<intent-filter>
部分,除非外部应用程序使用它。这方面的一个例子是使用诸如Intent
动作ACTION_VIEW
之类的东西来查看特定文档的mime类型。这基本上是一个隐含的Intent
动作。
如果您的Activity
类只是由您自己的应用程序组件在内部使用,那么它们应该仅使用expiclit Intents
启动,例如......
Intent myIntent = new Intent(this, MyActivity.class);
在这种情况下,启动Activity
'的应用组件会知道它想要做什么,并启动一个特定的Activity
来执行此操作。
答案 1 :(得分:0)
另一种方法是使用BroadcastReceiver来处理意图。它将反过来开始你的活动。从广播接收器做一个startActivity()。因此,您使用广播接收器上的过滤器获取意图,但广播接收器将使用startActivity启动相应的活动。所以在这种情况下它实际上是一个组合,但要求你广播意图而不是通过类名来定位它。如果您的应用很简单,您可以从其他活动中启动活动(意图)。但是不要在Activity上注册过滤器。我知道这个答案不是人群最喜欢的,但它被称为松散耦合,或关注点或其他东西。