編輯:關於android開發
Activity 裡面提供了一個 managedQuery() 方法,按照 Android SDK 裡面的說明,“the activity will manage its lifecycle for you.” 聽起來很好,Activity 可以替你管理 Cursor 的生命周期了,就不用記著去 close() 了,代碼可以更簡潔。
但是 Activity 是怎麼去管理 Cursor 的生命周期的呢?SDK 文檔沒說。最近遇到一個 bug,在一個 Activity 中,用 managedQuery() 查詢數據庫,將查詢得到的 Cursor 用 CursorAdapter 與 ListView 綁定。然後在 Activity 裡面執行批量刪除數據表記錄操作,因為耗時比較長,所以用了多線程處理。測試團隊發現的 bug 是,在刪除操作進行過程中,如果按下 Home 鍵,應用就崩潰了。崩潰原因是 Cursor 被釋放了,導致工作線程的刪除操作異常。
看了 Activity.java 的源碼之後就明白為什麼會崩潰了。managedQuery() 其實無非就是把查詢得到的 Cursor 放到了 Activity 類的一個數組成員變量中,然後當 Activity stop 的時候,將這個數組裡的每個 cursor 都關掉,以及在 resume 的時候,將數組裡的每個 cursor 都重新查詢一次。所以在按下 Home 鍵之後,Activity 被 stop 了,cursor 也就被關閉了,如果有個線程還在繼續使用這個 cursor,就會拋異常了。
因此,在用 managedQuery() 的時候,需要清楚 cursor 什麼時候會被釋放,並考慮好自己的代碼在 cursor 被釋放後不再需要使用這個 cursor.
【Android】不彈root請求框檢測手機是否root,androidroot由於項目需要root安裝軟件,並且希望在合適的時候引導用戶去開啟root安裝,故需要檢測手
Android應用開發編譯框架流程與IDE及Gradle概要 1 背景 建議閱讀本文之前先閱讀《Android Studio入門到精通》和《Groovy腳本基礎全攻略》及
《Android源碼設計模式解析與實戰》讀書筆記(二十四) 第二十四章、橋接模式 橋接模式也稱為橋梁模式,是結構型設計模式之一。橋接模式中體現了“單一職責原
Android快樂貪吃蛇游戲實戰項目開發教程-06虛擬方向鍵(五)繪制方向鍵箭頭,android-06本系列教程概述與目錄:http://www.cnblogs.com/