【问题标题】:Does android:onClick use Java reflection concepts behind the scenes?android:onClick 是否在幕后使用 Java 反射概念?
【发布时间】:2014-09-17 16:44:21
【问题描述】:

这个问题已经以多种形式被多次提出herehere;但我想确认一件事,我的问题很简单:android:onClick 使用 Java 反射吗?

由于 Java 反射会降低性能as explained here,我永远不想以低效的方式编写代码。

我只想要一个简单的答案:是(仅当您确定时)或否?

编辑

关于SO冲突理解的答案有很多:

例如,请参阅 this onethis one。两者都接受了答案,并且都在说两件不同的事情。 (这就是我发布问题的唯一原因。)

【问题讨论】:

  • 你为什么不尝试使用onClick,看看它是否对你的用例足够有效,而不是推测它在内部是如何工作的,然后做一些过早优化。
  • @aioobe 如何检查这种优化?我不知道。
  • @CaptainGiraffe 没有。因为它已经在问题中提到了。
  • @CaptainGiraffe 写在“android:onclick 使用/不使用 java 反射”的答案中?

标签: java android xml reflection onclick


【解决方案1】:

确实,它确实使用反射将方法(“methodName”)绑定到处理程序。这是在扩展 XML 时的一次性交易,不会以任何有意义的方式影响性能。 XML 膨胀本身就是一个相当昂贵的解析,

(根据http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/view/View.java#2017

除此之外,它就像在代码中做的一样。

【讨论】:

  • 那么,这个呢? stackoverflow.com/a/15840257/3960528他正在用源码证明。
  • 谢谢,我会接受它。但我不明白“这是一次性交易,不会以任何有意义的方式影响性能”玩具怎么能告诉这个?
  • @logx 在方法描述中说明它被用作膨胀过程的一部分。此过程将 XML 转换为可用的 Java 对象,并且每次创建视图只需执行一次。
【解决方案2】:

在响应按钮点击的延迟达到大约 1/10 秒之前,人类将其视为instantaneous,因此优化按钮点击响应的反射无关紧要

您不必担心此类问题,以便优化工作可以集中在存在可衡量性能问题的代码上。

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2012-03-20
    • 2011-01-30
    • 2017-01-13
    相关资源
    最近更新 更多