【问题标题】:In Android; is it better applying an OnClickListener or use android:onClick?在安卓中;应用 OnClickListener 还是使用 android:onClick 更好?
【发布时间】:2011-03-23 02:35:00
【问题描述】:

使用 onClick 性能会更好吗?如果我使用 onClick,我不必 必须设置 android:id(也避免使用 new View.OnClickListener),这会提高性能吗?全部?还是在幕后发生 findViewById 的效果相同?

此页面提供了两种方法作为选项,但几乎没有任何好处的指导。

http://developer.android.com/reference/android/widget/Button.html

这是一篇博客文章,他们认为 onClick 对于 1.6 后的应用程序来说“更简单”和“改进”;

http://android-developers.blogspot.com/2009/10/ui-framework-changes-in-android-16.html

这项新功能减少了 您必须使用的 Java 和 XML 数量 写,留给你更多的时间 专注于您的应用程序。

【问题讨论】:

  • 我不知道是否有任何性能影响(我怀疑有),但我愿意打赌应用 OnClickListener 以保持活动简单是一个更好的主意维护并保持严格的关注点分离。
  • 在你最后一次编辑之后:它可能更容易,但我不认为我的 onClick 处理程序是样板代码。它总是以个人品味而告终......
  • 我仍然坚持理解 findviewbyid 对性能的影响,我看到有些人说它们可能很昂贵等等,所以我的想法是减少 onclick 调用可能会有所帮助。加上减少 id 的设置(除非它们只是在您没有专门设置它们时在幕后完成)可能有助于在您确实需要时加速该功能。我已经接管了一些似乎 android:id 设置过度的代码,这让我相信从长远来看可能会超过 findviewbyid 的负担......
  • 我认为,如果考虑到性能这一点很重要,至少会在 developer.android.com 上的 Designing for Performance 最佳实践文章中提到,但它不存在,所以我想没什么好担心的。此外,并非一切都是性能。

标签: android performance android-layout


【解决方案1】:

我认为包含android:onClick 是一个非常糟糕的主意。

  1. 您正在将演示与逻辑相结合
  2. 除非您使用支持它的插件,否则如果您决定更改方法名称,则必须记住重构 xml 文件
  3. 只是不清楚 xml 中的按钮与 Activity 中对单击事件作出反应的方法之间的关系,除非您在 Java 文件中明确看到它定义。使用android:onClick 方法,您甚至可以忘记布局中有一个按钮,或者是哪个方法正在处理其onClick 事件。

我建议您坚持以编程方式定义您的 OnClickListeners,并严格分离关注点,正如 Corey Sunwold 在他的评论中指出的那样。

【讨论】:

  • 您正在将演示与逻辑相结合。很好的声明。
  • @joaquin 这不好。这只是令人困惑。我认为没有真正的意义。去阅读其他线程。他们中的许多人说这两种方法相似,但取决于使用情况。
  • @David 我的意思是“包含 onClick 方法是一个非常糟糕的主意,因为将表示与逻辑相结合”。这是一个很好的声明。
【解决方案2】:

我正在考虑如何测试这个......但我相信两者之间没有性能差异,它们只是同一事物的不同接口。

【讨论】:

  • 我认为这可能取决于在 XML 编译中设置 onclick 的方式,因此它们可能并不完全相同。无论哪种方式,我都怀疑会对性能产生任何影响。
【解决方案3】:

当我只需要我的Button 可点击时,我使用android:onClick

如果我需要对Button 做其他事情,例如启用/禁用它,我会按照mgv 所说的那样使用setOnClickListener()

还请记住,android:onClick 在 Android 1.5 中不起作用。

【讨论】:

  • 其实你可以设置 android:clickable="true" 代替
【解决方案4】:

您可以考虑改用 onTouchListener。我发现它更快,特别是如果您希望动作发生在按下而不是发布时。

【讨论】:

  • 但按钮操作的最佳实践必须在释放时发生。因为我们可以在那里显示动画或选择器,用户可以通过在按住触摸时将手指移出按钮来取消点击本身
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多