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)){
    }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

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