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 getDiffElementUseMap(List list1,List 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)){
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值