Android开发过程中可以注意的一些小细节

Android开发的一点点小细节

前言

千里之堤毁于蚁穴,一个APP崩溃何尝也不是这样呢,其实很多时候都是因为平时没有注意一些小细节。现在就来分享下一些我平时开发过程中注意的一些事,当然我最开始也是没有注意的,从而导致出现了一系列的大问题。

  • 使用switch case 不要忘记最后加break来退出。
  • ListView的item不能为fragment,因为fragment是由fragmentmanage来进行管理,listview的item是由adapter进行管理。
  • ListView获取它的item view是通过 view= (View) listView.getAdapter().getItem(i); i就是对应的位置,如果使用了viewholder,那么就应该用现在屏幕的那个item的 postion减去我们需要获取的那个postion。
  • java中对象要比较是否相同,一次new出来的情况下比较才会返回true,否则为flase
  • Cursor正确的遍历方法
//cursor不为空,moveToFirst为true说明有数据
if(cursor!=null&&cursor.moveToFirst()){
     do{
     }while(cursor.moveToNext);
}

不然容易出现漏掉的数据(我在读取手机联系人和短信的时候就碰到过这种坑)

  • 比较两个list当中不同的元素
 public List<String> getDiffElementUseMap(List<String> list1,List<String> list2){

        long runtime = System.nanoTime();//开始计时
        //利用map中不能有重复元素的特点
        Map<String, Integer> map = new HashMap<String, Integer>(list1.size()+ list2.size());
        List<String> diffList = new ArrayList<String>();//用于保存两个list中不同的元素
        for (String string : list1) {
            map.put(string,flagUnique);//先将list1中元素复制到map中保存
        }
        for (String string : list2) {
            Integer key = map.get(string);// 获得键值
            if (key != null) {//如果map中已经存在该元素,说明list1中存在该元素,那么将其key加1
                map.put(string, ++key);
                continue;
            }else{//如果不存在,则放入map中
                map.put(string,flagUnique);
            }
        }
        for (Map.Entry<String, Integer> entry : map.entrySet()){
            if (entry.getValue() == flagUnique)//在map中,键值为flagUnique的元素即为无重复的元素
            {
                diffList.add(entry.getKey());
            }
        }
        return diffList;
    }
  • 广播注册与反注册,注销广播时要确认该广播是否注册
  • 获取LinearLayout宽高度
    由于Android程序的运行机制决定了无法再组件类外部使用getWidth和getHeight方法获得高度和宽度(在自定义组件类中可以实现),必须使用View.getMeasuredWidth和View.getMeasureHeight方法获得当前组件的宽度和高度,在调用这两个方法之前,必须调用View.measure方法先测量组件宽度和高度。
    如果想直接获取在布局文件中定义的组件的宽度和高度,可以直接使用
View.getLayoutParams().width和View.getLayoutParams().height

View view = getLayoutInflater().inflate(R.layout.activity_main, null);  
LinearLayout linearlayout = (LinearLayout)view.findViewById(R.id.linearlayout);  
//measure方法的参数值都设为0即可  
linearlayout.measure(0,0);  
//获取组件宽度  
int width = linearlayout.getMeasuredWidth();  
//获取组件高度  
int height = linearlayout.getMeasuredHeight();  

*ScrollView嵌套ListView或者RecyclerView,ListView会把上面的布局顶上去
解决方法,取消掉listview的焦点
lv.setFocusable(false);

  • List遍历优化
    for循环
    访问成员变量比访问本地变量慢得多,如下面一段代码:

    1. for(int i =0; i < this.mCount; i++) {}
      永远不要在for的第二个条件中调用任何方法,如下面一段代码:

    2. for(int i =0; i < this.getCount(); i++) {}
      对上面两个例子最好改为:

    3. int count = this.mCount; / int count = this.getCount();

    4. for(int i =0; i < count; i++) {}

  • 触摸事件拦截
    public abstract void requestDisallowInterceptTouchEvent (boolean disallowIntercept)
    子View如果不希望其父View拦截Touch事件时,可调用此方法。当disallowIntercept这个参数为true时,父View将不拦截。
    可以通过getParent.requestDisallowInterceptTouchEvent(true);

  • 基本数据类型转换成String
    把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+””最慢

  • 初次提交到github上报 failed to push some refs to git此错误

出现错误的主要原因是github中的README.md文件不在本地代码目录中

需要通过下面代码进行合并
git pull --rebase origin master
然后在提交 git push -u origin master

git回滚任意版本
首先 git reflog 查看全部版本
然后 git reser --hard 版本号 提示 HEAD is now at 版本号 test 代表成功
最后强制提交
git push -f origin master

  • 字符串比较,和判断字符串是否为空
    比如说我要比较time是否为字符串1
    写法如下:
    if( "1".equals(time)){
    }

    判断一个字符是否为空可以像下面这样写
    if(TextUtils.isEmpty(time)){
    }

    以上就一些平时开发过程中总结出来的小细节,欢迎指出一些不足...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,614评论 2 45
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,126评论 25 709
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,790评论 0 33
  • 今天玉民和我打了1个小时电话伸展我。真的很感动,玉民同学为了伸展我想了整整两天。在他身上我懂得了什么叫把同...
    晨曦晓林阅读 100评论 0 0
  • 十多年前,第一次踏上鼓浪屿的土地,就被她深深地吸引了。 那是我第一次看见海洋,所有的期待都汇聚成一次美好的鼓浪屿之...
    夜间列车阅读 489评论 0 4