美文网首页
Android开发之师弟可能不知道

Android开发之师弟可能不知道

作者: gzejia | 来源:发表于2017-01-08 23:08 被阅读19次

    开发了将近一年的项目,不停的重复着做一些重复的事。其中有很多是在更新迭代以及再开发的过程中,不断得以改进的地方。对于这些频繁又基础的操作,如果还没有接触的赶紧来试试吧!

    简单知识,简单掌握

    .class

    Collections.emptyList();
    

    当从一个函数当中获取一个数组且我们并不希望返回数组为 null 的情况下,可使用 Collections.emptyList() 来代替 new ArrayList() 或者 new LinkedList(),既可省去对返回数组对象的 null 判断,亦可省去不必要的内存开销。String[] strs = {"a","b","c"};

    List strList = Arrays.asList(strs);// String[]转ArrayList
    String[] strs2 = strLs.toArray(new String[strLs.size()]);// ArrayList反转String[]
    strList.replaceAll(",","");// 输出"abc"
    Collections.swap(strList, 0, 2);// 输出"cba"
    

    拒绝繁琐的工作方式,让便捷成为一种辅助你偷懒的工具。

    TextUtils.isEmpty(string);
    

    可以通过 string.equals(null) 判断 string 是否为 null ,但更多时候也需要判断 string 的长度是否为0,即 string.equals("") ,但如果 string 为 null 会导致判断时出现 NullPointerException 异常。固然 TextUtils.isEmpty(string) 才是两全齐美的选择。

    private static String sExact = "123";
    
    if(sExact.equals(str));// 判断 str 的值是否等同于设定的值 "123"
    

    或许有些人较为习惯 if(str.equals(sExact)); 这种写法,但是你可能不经意忘记 str 它自身存在 null 的情况,所以为了避免其造成 NullPointerException 异常,需要加多个判断 if(null != str && str.equals(sExact)); 。

    然而实际上可直接用 if(sExact.equals(str)); 的来代替 if(null != str && str.equals(sExact)); 。前提是已经确认 sExact 为预设常量,并不存在 null 的情况。

    ArrayList mList = ...;
    if(null != mList && mList.isEmpty()){};
    

    与 TextUtils.isEmpty() 同理,对于数组内容大小是否为0,引用 isEmpty() 便可直接代替 mList.size() == 0 这一判断。

    private final static int ADULT_AGE = 18;
    String type = year >= ADULT_AGE ? "young man" : "childer";
    

    可以一行代码解决的判断,就不要依赖 if else 了,更何况这种写法效率更高。

    private final static int ADULT_AGE = 18;
    public void toXXOO(){
        if(year < ADULT_AGE ){
            Toast.makeText(context, "Minors are not allowed in!", Toast.LENGTH_SHORT).show();
            return;
        }
        ... // do anything
    }
    

    这里代码上并没有什么特别之处,只是我们通过 return 省去了 else 编辑以及之后代码的执行,让代码不至于往右方向缩进。当然并非所有环境下都能适用,若判定顺序以及内容比较复杂的情况,仍建议用回 else ,恢复提高代码的可读性。

    for(int i = 0, k = list.length(); i < k; i ++);
    

    是不是感到有些许蒙逼了呢? 骚年,其实际上只是帮你上去了一行代码而已,切莫惊慌。

    for(Object object : objectList);
    

    继JDK 5.0之后 for 循环的增强版,简化编程。建议使用(除了集合以及需要索引的场景以外)。

    .xml

    <TextView
        tools:text="预览效果"
        android:visibility="gone"
        tools:visibility="visible"/>
        .../>
    

    根布局记得引入 xmlns:tools="http://schemas.android.com/tools"。简单点说吧, tools 可实现任意属性并实现“预览效果”,但实际代码运行这些属性的设置是不会出现的。

    viewStub.inflate();viewStub.setVisibility(View.VISIBLE);
    

    布局的延迟加载,占用资源小。执行 inflate() 时 viewStub 所指向的布局仍然会被实例化,也就是说其依然会占用相应的内存资源。建议使用但实际上并不常用,注意 inflate() 只能执行一次。

    @dimen/font_main@color/blackcenter
    

    单个布局以及跨布局出现重复视图样式的情况,建议在 style.xml 当中自定义通用的样式属性,一方面方便布局文件的浏览,减少了代码的编辑量,另一方面还有利于项目的后期维护。

    other

    • 尽可能的避免创建全局变量,能局部就局部(打比方 listView.getAdapter(); 既然这里能获取就可以尽量避免 new 一个 Adapter 在全局上,当然如果局部调用较为频繁那就给放全局吧);
    • 布局设计尽可能不要过多的嵌套(除非真的没辙,一定要这么做);
    • 无论是代码实现还是 UI 设计,为了创建美好幸福将来,能脱离复用就脱离复用;-接手别人项目的能参考就参考,不能参考得改的就该批量改,不要局部改。

    相关文章

      网友评论

          本文标题:Android开发之师弟可能不知道

          本文链接:https://www.haomeiwen.com/subject/mdscbttx.html