2015/04/28

Test Your Deep Links

今天看文件才想到 adb 有提供指令可以直接發 Intent 給 App,而且還能帶 URI data,這樣要用來測試 protocol 就方便多了!

Reference:
https://developer.android.com/training/app-indexing/deep-linking.html#testing-filters

2015/04/27

android.database.CursorWindowAllocationException

當 Cursor 沒有確實關閉並且累積到一定數目時,App 就會出現異常報錯,無法查詢資料庫,甚至 crash。這邊記錄一些容易出錯的例子:

。提前返回
    有時會沒注意到在調用 close() 之前就 return 了,尤其在比較複雜的程式碼中就可能會疏忽。

。異常處理
    在還沒執行 close() 之前就因為處理 exception 而跳過。

要避免這種情形,應該要把 close() 放到 finally 裡確保它會執行。

另外我們也可以在 Cursor 的建構及關閉時加上 log 來測試及偵錯。

這樣就能清楚檢查是否有 Cursor 未確實關閉,但要先等 App 完全結束程序時再做,因為有些 Cursor 可能仍在背景運行中。

Reference:
http://oteku.blogspot.tw/2013/11/how-to-detect-android-cursor-leak-en.html

2015/04/26

java.util.ConcurrentModificationException

前陣子在做 for-each 執行某項過濾功能時遇到這個異常報錯,原因在於 for-each 的架構是不能使用於過濾需求的,一旦變動了集合的內容便會發生錯誤。在這邊可以使用 Iterator 調動集合的方式來解決,在多個執行緒中也能做到同步。

另外如果集合不大,也可以使用 counted loop 來處理。

Reference:
http://stackoverflow.com/a/223929/1770125