Android Cookie

Android 安卓是最开放的手机操作系统,谷歌安卓APP开发和安卓市场的相关话题

我可以从Dalvik和Android工具链中获得什么样的优化?

我正在研究一个高性能的Android应用程序(一个游戏),尽pipe我首先尝试为可读性编写代码,但是我仍然想在后面看到底下发生了什么。 用C ++,我已经开发了一个相当好的直觉了解编译器将会和不会为我做什么。 我正在尝试为Java / Android做同样的事情。 因此,这个问题。 在networking上我可以find关于这个话题的很less的东西。 Java编译器,Dalvik转换器(dx)和/或JITter(在Android 2.2+上)会执行如下的优化吗? 方法内联。 在什么条件下? private方法总是可以安全地内联; 这会完成吗? public final方法如何? 其他类的对象的方法? static方法? 如果对象的运行时types可以很容易地被编译器推断出来怎么办? 我应该尽可能将方法声明为final或static吗? 常见的子expression式消除。 例如,如果我访问someObject.someField两次,查询是否只做一次? 如果这是一个getter的调用呢? 如果我使用了两次算术expression式呢? 只会评估一次吗? 如果我将某个expression式的结果用作for循环的上界,那我该怎么办? 边界检查arrays查找。 工具链会在某些条件下消除这种情况,比如原型循环? 价值内联。 将访问到一些public static final int总是内联? 即使他们在另一个class级? 即使他们在另一个包裹? 分支预测。 这个问题甚至有多大? 分支是一个典型的Android设备上的大型性能? 简单的算术。 将someInt * 2replace为someInt << 1 ? 诸如此类……

如何处理多片段活动中的onContextItemSelected?

我目前正试图使我的应用程序使用“适用于Android v4的兼容性库”,甚至为Android 1.6用户提供片段使用的好处。 上下文菜单的实现似乎很棘手: 应用程序的主要活动是扩展FragmentActivity类。 这些片段都是基于扩展片段类的一个类。 片段类在其onCreateView()方法中调用registerForContextMenu() ,并覆盖onCreateContextMenu()和onContextItemSelected()方法 。 对于onCreateContextMenu(),这工作得很好。 上下文菜单从资源文件中膨胀,并根据所选项目(基于listView …即使片段不是ListFragment)稍作修改。 select上下文菜单项时会发生此问题。 为所有当前存在的片段调用onContextItemSelected() ,从第一个添加的片段开始。 在我的情况下,片段是用来显示文件夹结构的内容。 当打开一个子文件夹片段的上下文菜单并select一个菜单项时, onContextItemSelected()首先在上层被调用(这取决于在这一刻允许/可见的片断数量)。 现在,我通过活动级别的字段使用一个解决方法,该字段包含调用其onCreateContextMenu()的最后一个片段的标记。 这样,当存储标记与getTag()不相同时,我可以在onContextItemSelected()的开头调用“return super.onContextItemSelected(item)”。 但是这种方法对我来说看起来有点肮脏。 为什么onContextItemSelected()在所有片段上调用? 而不只是一个调用onCreateContextMenu() ? 什么是最优雅的方式来处理这个?