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

    以上就一些平時開發過程中總結出來的小細節,歡迎大佬們指出一些不足…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章