Vary's Blog

Android 代码规范

  • 多用组合, 少用继承

    如果继承很重,那么子类不管要不要,有没有用,都会拥有父类的所有东西,影响子类性能造成代码冗余.
    继承可能破坏封装:因为子类和父类之间可能存在着实现细节的依赖.
    子类在继承父类的时候,往往不得不关注父类的实现细节,而父类在修改其内部实现的时候,如果不考虑子类,也往往会影响到子类.

  • 一般try…catch…只捕获需要的异常,谨慎地使用异常,异常捕获的代价非常高昂,异常使用过多会严重影响程序的性能。参考Java异常处理和设计第五点
  • try…catch…中,catch…块不得为空,至少应当将异常信息输出
  • 不要在循环中使用try…catch…,应该把其放在最外层
  • 当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按递增顺序(参数多的写在后面)出现在一起,中间不要放进其它函数/方法。例如:
    1
    2
    3
    4
    5
    6
    7
    public GameView(Context context) {
    this(context, null);
    }
    public GameView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
    }
    public GameView(Context context, AttributeSet attrs, int defStyle) {}
  • 把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之数据 + ""最慢
  • 静态成员:使用类进行调用
    使用类名调用静态的类成员,而不是具体某个对象或表达式。

    1
    2
    3
    4
    Foo aFoo = ...;
    Foo.aStaticMethod(); // good
    aFoo.aStaticMethod(); // bad
    somethingThatYieldsAFoo().aStaticMethod(); // very bad
  • EventBusRxBus 不可将Stringint等作为消息类型传递,每个不同的事件都应定义一个Class类,哪怕这个类没有任何属性和方法。

    有这样的场景,就是我们发送事件时,有时候这个事件不含任何数据,只是一个简单的通知。 有的小伙伴可能就会想到通过发送String或者int常量,在接收时判断相等来区分事件类型,这个一种不太好的做法。 因为Rxbus是根据Class类型来过滤订阅者发送消息的,如果过度使用这种方式会直接导致RxBus在每次发射这类数据时,因订阅者的过多而使发射效率变慢。 所以最好为每个不同的事件都定义一个Class类,哪怕这个类没有任何属性和方法,以达到最高效率。

  • intent 传递Extras的key值禁止使用硬编码,请使用常量。

  • 最好不要以new的方式创建Fragment,推荐使用静态工厂方法模式创建Fragment.
    例如:

    1
    2
    3
    4
    5
    public static HomeFragment newInstance() {
    return new HomeFragment();
    }
    HomeFragment home=HomeFragment.newInstance();//good
    HomeFragment home=new HomeFragment();//bad
  • 合理布局,有效运用<merge><ViewStub><include>标签

  • 使用RxJava时,在不影响代码可读性的情况下,尽量减少操作符的使用.

    刚开始使用RxJava的时候,我们会觉得operator的链式调用会非常的爽,一个简单的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    Observable.just("1", "2", "3", "4", "5", "6", "7")
    .map(x -> Integer.valueOf(x))
    .map(x -> x * 2)
    .map(x -> x + 4)
    .filter(x -> x >2)
    // and much more operators
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread());

    当你只有很少数据的时候,这样当然可以,但是你数据量上来的时候,这就会有很多的overhead。 其实几乎所有的operator都会给你生成一个新的Observable。所以在上面这个例子中,我们在过程中生成了至少7个Observable。然而我们完全可以将中间的.map().map().map().filter合并在一个FlatMap中,减少很多的overhead。

updating…

Vary Zhao wechat
欢迎你扫描上面的二维码,加我微信