1

我正在查看一些 lint 错误,并注意到有两种方法可以转换活动。

根据我从各种互联网资源中了解到的信息,我一直在为清单中的每个活动分配一个带有动作名称的意图过滤器,然后调用它以进行该活动。

然而,这给了我:“导出的活动不需要权限”lint 错误。有人说这可能是一个奇怪的问题,最好通过引用活动类来(使用 startActivity() 方法)。通过调用活动的类而不是意图过滤器。

谁能证明哪种方式更好?然而,似乎不提示 lint 错误的方式会是更好的方式......

谢谢!

4

2 回答 2

3

推荐的方法是清单中Activity不应包含已注册的<intent-filter>部分,除非它旨在供外部应用程序使用。这方面的一个例子是使用类似Intentaction的东西查看特定的文档 mime 类型ACTION_VIEW。这基本上是一个隐含的Intent动作。

如果您的Activity类仅供您自己的应用程序组件在内部使用,那么它们应该只能使用 expiclit 启动Intents...

Intent myIntent = new Intent(this, MyActivity.class);

在这种情况下,应用程序组件启动Activity“知道”它想要做什么并启动一个特定Activity的去做。

于 2012-08-14T23:55:29.937 回答
0

另一种方法是使用 BroadcastReceiver 来处理意图。它将反过来开始您的活动。从广播接收器执行 startActivity()。因此,您在广播接收器上使用过滤器获取意图,但随后广播接收器将使用 startActivity 启动相应的活动。因此,在这种情况下,它确实是一种组合,但需要您广播意图而不是通过类名来定位它。如果您的应用程序很简单,您可以从另一个活动中开始活动(意图)。但不要在 Activity 上注册过滤器。我知道这个答案不是大众最喜欢的,但它被称为松散耦合,或关注点分离或其他东西。

于 2012-08-15T00:24:02.350 回答