2016年11月30日 星期三

[Android] 最近踩到的Android坑

近日踩到一些Anndroid的坑
但是有些網路上的技術文好像沒提(或是我沒查到?)
歡迎交流指正~

GPS

  • LocationManager getBestProvider(Criteria criteria, boolean enabledOnly)
    這個API沒辦法用 fake gps 去測!!
  • 紅米Android 6 就算關掉gps 他還是拿的到getLastKnownLocation的location,
    一定要關掉應用程式的權限才真正的關掉

app背景數據記憶體暫存清除,再點icon喚醒app

  • 平常都是從最外層的 application > activity > fragment onCreate,
    但是重新喚醒後先create的是最內層的fragment >>> 最外層fragment > application > activity,
    此時如果有甚麼東西從外層用fragment的建構子丟進來的東西,
    不要懷疑fragment就是沒拿到外層的東西
    取值請用getParentFragment

dialog開著旋轉螢幕crash

build gradle設定apk name帶有日期

  • 直接在 AS run 他沒有更新 build gradle的資訊,
    比如說,我 build 12.01.apk,隔天他會繼續run昨天的apk,但是改的code卻是產生了一個 12.02.apk,
    很容易納悶為什麼我改的東西好像沒改到?!
  • 最好的方法是只設定release apk(signed)才帶有日期,
    平常在run AS產生的apk就讓他的名字是default就好了,讓他一直覆蓋過去不要產生新的apk
    因為現在找不到確切方法如何只讓signed apk 有日期的設定,
    所以先愛用clean project 和 AS 右邊的gradle展開,左邊第一個按鈕 refresh gradle project (每日按XD|||)

recyclerview 長寬不能動態變換

  • 不然他會一直重新產生scroll長度,導致會看到跳動畫面的情況,
    我甚至還嘗試了recyclerview.layout()/recyclerview.setY() 效果超慘,
    目前看到做複合的header recyclerview 都是把recyclerview 高度寫死撐滿螢幕,
    但是會有fake的header view 給 recyclerview
    或是外面再包一層scrollview 再依照適當時機分配touch event

請善用 https://github.com/SalomonBrys/ANR-WatchDog

  • 寫了一年Android沒人告訴我可以用這個lib….
    上網查ANR大多都是要你找手機產生的trace.txt檔,好像要root才看的到orz
    不然就是模擬器,但是模擬器根本太慢,
    官方也只會提醒你不要把耗時的寫在主線程 O_<
    反正感謝這個lib加快了我debug的速度!!

Fragment蓋了兩層

  • click會穿透,請把裝fragment的view xml設置為clickable=true

Handler不要放在thread裡面

  • Exception只會叫你加個loop,但實際這樣寫會卡死
    是時候該去唸多線程處理了XD

method只會傳值不會傳位址


  • 如果把String傳進method改字,外面的String並不會跟著改變