1. 经常变动的字符串要用 StringBuilder,然后每次变动用 append 方法。而不应该每次创建新的 String。
2. 使用 static final 变量。
3. It‘s reasonable to follow common object-oriented programming practices and have getters and setters in the public interface, but within a class you should always access fields directly. 只对公共的 interface 用 getters and setters。而对于普通的类,应该直接使用 public 属性。
4. 数组遍历的方法。
static class Foo { int mSplat; } Foo[] mArray = ... public void zero() { int sum = 0; for (int i = 0; i < mArray.length; ++i) { sum += mArray[i].mSplat; } } public void one() { int sum = 0; Foo[] localArray = mArray; int len = localArray.length; for (int i = 0; i < len; ++i) { sum += localArray[i].mSplat; } } public void two() { int sum = 0; for (Foo a : mArray) { sum += a.mSplat; } }
最后一个函数最优秀,倒数第二个略次之。第一个函数是绝对错误的。
5. you can avoid the overhead by declaring fields and methods accessed by inner classes to have package access, rather than private access. Unfortunately this means the fields can be accessed directly by other classes in the same package, so you shouldn‘t use this in public API. 尽量避免使用 private inner class。可见性应该尽量用包可见(什么也不加)而不是私有(private)。
6. 能用 int 就尽量不用浮点数,因为成本更高。double 和 float 有同样的速度。
7. 调用 HashMap 的方法比
Map 快。
************** 界面方面 ***********************************************************
8. 不要嵌套使用 weight 属性。因为要进行很多计算。尤其对于界面经常变化的组件如 ListView
和 GridView
9. 使用组合控件比分别使用多个控件效率更高。比如一个自定义的组件包含一个 TextView 和一个 ImageView。
10. 避免使用太多曾嵌套的 layout
11. 使用 <include/>
或 <merge/> 来重用 layout。
12. 对于 ListView,使用 ViewHolder
来存放控件以避免重复的进行 findViewById。