安卓資料庫操作放哪個線程
1. android在手機本地資料庫讀取數據屬於耗時操作嗎,用啟動新線程嗎
資料庫操作建議不要寫在UI里線程里,尤其是當數據量比較大時,這樣比較容易引起ANR。所以建議啟動新的線程里來處理資料庫操作。
2. android操作sqlite資料庫需要new一個新thread嗎
不需要,如果sqlite查詢很耗時的話可以使用thread非同步查詢。
SQLite是輕量級嵌入式資料庫引擎,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLiteSQLite 由以下幾個組件組成:SQL 編譯器、內核、後端以及附件。SQLite 通過利用虛擬機和虛擬資料庫引擎(VDBE),使調試、修改和擴展 SQLite 的內核變得更加方便。
Android 集成了 SQLite 資料庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應用程序都可以使用 SQLite 資料庫。
資料庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQLite 資料庫 Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。
Android 提供了 SQLiteOpenHelper 創建一個資料庫,只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實現三個方法:
1 構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
3 onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
3. GreenDAO的資料庫操作需要在子線程完成嗎
當然是可以的,在線程裡面會有很多程序,可以調用任何程序啊,這樣調用的程序都在一個線程里完成的。在這個過程中當然也可以調用database類來完成對資料庫的操作。
4. android 哪些操作需要在ui 線程中
anroid系統中UI線程負責向UI組件分發事件(包括繪制事件),並處理用戶和應用之間交互。
做一些比較耗時的工作比如訪問網路或者資料庫查詢,都會阻塞UI線程,導致事件停止分發(包括繪制事件)。對於用戶來說,應用看起來像是卡住了,更壞的情況是,如果UI線程blocked的時間太長(大約超過5秒),用戶就會看到ANR(application not responding)的對話框。
因此在ui線程做耗時非常短,不會發生阻塞的操作
5. 安卓 用多線程對同一資料庫(SQL)進行讀寫操作 用什麼方法
方法加同步鎖,保證在同一個時間內只有一個人可以使用可以解決,具體可以參照http://www.blogjava.net/tscfengkui/archive/2010/11/10/337709.html?opt=admin 這個例子
6. android 資料庫操作可以放在子線程裡面嗎
mysql是免費資料庫,市場普及率非常高,而新建資料庫就得一切從0來,收費還是不收費?編個新資料庫技術並不難,難在資料庫標准化機構是美國的,美國大嘴一張,整個資料庫就得重改這裡面的維護預算誰給出?
7. android sqlitedatabase 的操作是同步線程安全的嗎
是的,默認的情況下,你可以把insert,update這些函數看作原子操作。可以參考這一篇
網頁鏈接
但是你需要注意,你不能多次調用close函數,否則會產生異常。
8. android sqlite是在哪個線程商
其實在只使用一個SQLiteDatabase的引用時,SQLiteDatabase對CRUD操作都會加上一個鎖(因為是db文件,所以精確至資料庫級),這就保證了在同一時間你只能進行一項操作,無論是不是在同一個線程中,這就導致了如果你在程序中對SQLiteOpenHelper使用了單例模式,那麼你對資料庫讀寫進行任何的優化操作都是"徒勞"。
多線程讀資料庫
仔細看源碼你會發現,在資料庫操作中只有add,delete,update會調用lock(),而query()是不會調用的,但是在載入數據時,調用了SQLiteQuery的fillWindow方法,而該方法依然會調用SQLiteDatabase.lock(),所以要想真正的實現多線程讀資料庫,只能每個線程使用各自的SQLiteOpenHelper對象進行讀操作,這樣就可避開同步鎖。關鍵源碼如下: