再次探讨Android开发值得注意的规范

来源:互联网 发布:管家婆软件安装步骤 编辑:程序博客网 时间:2024/04/29 03:29

上一篇博客,我已经谈及一些有关Android开发值得注意的规范。在此基础上,来扩展探讨其他容易引发不规范编程的细节问题。

一、线程同步问题

很多时候,都需要开多个线程并发工作。但是,如果使用共享变量来实现线程之间通信,可能两个甚至多个线程同时访问某个变量,导致变量混乱引发死锁。为了实现线程同步,变量采用synchronized关键字作为同步锁。

用法如下-->

private Timer timer = null;private void cancelNotification() {    if (timer != null) {          synchronized (timer) {            ...        }    }}

二、捕获异常问题

执行一个方法可能会抛出多个异常,那么需要同时捕获这些异常并进行适当处理。这时会出现多个catch并行书写,显得不够简洁,可以把多个Exception采用或表达式写在一起。另外,catch里面最好进行恰当处理,比如使用log打印日志以便排查问题。最后,加上finally进行处理。

用法如下-->

try {   ...} catch (OutOfMemoryError | Exceptio e){    Log.e("mError",e.toString());}finally{   ...}
   三、全局与局部
   我清晰地记得C语言老师多次强调:能够使用局部变量(private)就不要使用全局变量(public),尽量减少使用全局变量。同理,能够使用私有方法,就不要写成公有方法。能够写成本地变量,就没必要写成成员变量。
    四、if表达式
    if表达式用于条件语句判断,有时候可以简化,有时候没必要if{}与else{}成对出现。
情景1:
if表达式简化前-->
if (account.isExist()) {           return false;        }        return true;
简化后-->
 return !account.isExist;
情景2:
if与else成对出现-->
if(a == null){   return;}else {   ...}
只需要if判断-->
if(a != null){   ...}
五、布尔表达式
    众所周知,布尔表达式只有两个状态true和false,有时候return boolean值与结合if条件语句来写,可以直接使用布尔表达式更加简洁些。
情景1:
boolean值与if语句结合-->
if(a > b){   return true;}else {   return false;}
直接使用布尔表达式-->
return a > b;

情景2:
布尔变量与true/false比较-->
if(a == true){   ...}
直接使用布尔变量本身-->
if(a){   ...}

六、"HardCode"引用
    android studio很有意思,使用自带的lint静态代码检查时,可以检测出固定或指定(HardCode)代码片段引用,并且给出对应解决方法。
例如获取sd卡路径-->
public final static String DATA_URL = "/data/data/";
恰当用法-->
public final static String DATA_URL = Context.getFileDir().getPath();
    七、线性布局的权重

线性布局提供权重(weight)分配,如果在使用weight属性的情况下,高度或者宽度使用0dp代替wrap_content或者match_parent,性能会相对好些。
weight与wrap_content结合使用-->
android:layout_height="wrap_content"android:layout_weight="1"
weight与0dp结合使用-->
android:layout_height="0dp"android:layout_weight="1"

八、cursor对象
需要从数据库查询数据时,通常是利用cursor对象进行数据查询。但是很多时候,cursor使用完毕忘记关闭它。此时,静态代码检测后会抛出missing recycle()calls这样提示。那么,我们需要调用close()方法释放cursor。
    九、注意view的重绘    在xml布局里面,我们往往会利用background属性自定义背景色。此时静态代码检测后会提示"OverDraw:Painting regoins more than one"。事实上,我们已经在AndroidManifest.xml文件配置过activity窗体布局的背景色。android:theme="@android:style/Theme.Light.NoTitleBar"。现在呢,在xml父布局又自定义背景色。android:background="@color/white"。这样就造成了view的重绘,影响app的性能。
    最后,我想说的是,本人编程初期也不注重开发规范。以上是我个人对开发规范的一些总结,如有错漏希望大家及时指出共同进步。我写下这篇博客初衷是,让自己更加注重开发规范,养成编写规范代码的习惯,以此自勉。同时,也共勉徘徊在不规范大门的同行,开发规范牢记于心,从细节做起,从现在做起。



0 0
原创粉丝点击