<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 數據存儲 #### 1、描述一下Android數據持久存儲方式? > * 參考回答:Android平臺實現數據持久存儲的常見幾種方式: > * **SharedPreferences存儲**:一種輕型的數據存儲方式,本質是基于XML文件存儲的key-value鍵值對數據,通常用來存儲一些簡單的配置信息(如應用程序的各種配置信息); > * **SQLite數據庫存儲**:一種輕量級嵌入式數據庫引擎,它的運算速度非常快,占用資源很少,常用來存儲大量復雜的關系數據; > * **ContentProvider**:四大組件之一,用于數據的存儲和共享,不僅可以讓不同應用程序之間進行數據共享,還可以選擇只對哪一部分數據進行共享,可保證程序中的隱私數據不會有泄漏風險; > * **File文件存儲**:寫入和讀取文件的方法和 Java中實現I/O的程序一樣; > * **網絡存儲**:主要在遠程的服務器中存儲相關數據,用戶操作的相關數據可以同步到服務器上; #### 2、SharedPreferences的應用場景?注意事項? > * 參考回答: > * SharedPreferences是一種輕型的數據存儲方式,本質是基于XML文件存儲的key-value鍵值對數據,通常用來存儲一些簡單的配置信息,如int,String,boolean、float和long; > * 注意事項: > * **勿存儲大型復雜數據,這會引起內存GC、阻塞主線程使頁面卡頓產生ANR** > * **勿在多進程模式下,操作Sp** > * **不要多次edit和apply,盡量批量修改一次提交** > * **建議apply,少用commit** > * 推薦文章: > * [史上最全面,清晰的SharedPreferences解析](https://blog.csdn.net/geekerhw/article/details/79713068) > * [SharedPreferences在多進程中的使用及注意事項](http://zmywly8866.github.io/2015/09/09/sharedpreferences-in-multiprocess.html) #### 3、SharedPrefrences的apply和commit有什么區別? > * 參考回答: > * **apply沒有返回值而commit返回boolean表明修改是否提交成功。** > * **apply是將修改數據原子提交到內存, 而后異步真正提交到硬件磁盤**, 而commit是**同步**的提交到硬件磁盤,因此,在多個并發的提交commit的時候,他們會等待正在處理的commit保存到磁盤后在操作,從而降低了效率。而apply只是原子的提交到內容,后面有調用apply的函數的將會直接覆蓋前面的內存數據,這樣從一定程度上提高了很多效率。 > * **apply方法不會提示任何失敗的提示。** 由于在一個進程中,sharedPreference是單實例,一般不會出現并發沖突,如果對提交的結果不關心的話,建議使用apply,當然需要確保提交成功且有后續操作的話,還是需要用commit的。 #### 4、了解SQLite中的事務操作嗎?是如何做的 > * 參考回答: > * SQLite在做CRDU操作時都默認開啟了事務,然后把SQL語句翻譯成對應的SQLiteStatement并調用其相應的CRUD方法,此時整個操作還是在rollback journal這個臨時文件上進行,只有操作順利完成才會更新db數據庫,否則會被回滾; #### 5、使用SQLite做批量操作有什么好的方法嗎? > * 參考回答: > * 使用SQLiteDatabase的beginTransaction方法開啟一個事務,將批量操作SQL語句轉化為SQLiteStatement并進行批量操作,結束后endTransaction() #### 6、如何刪除SQLite中表的個別字段 > * 參考回答: > * SQLite數據庫只允許增加字段而不允許修改和刪除表字段,只能創建新表保留原有字段,刪除原表 #### 7、使用SQLite時會有哪些優化操作? > * 參考回答: > * 使用事務做批量操作 > * 及時關閉Cursor,避免內存泄露 > * 耗時操作異步化:數據庫的操作屬于本地IO耗時操作,建議放入異步線程中處理 > * ContentValues的容量調整:ContentValues內部采用HashMap來存儲Key-Value數據,ContentValues初始容量為8,擴容時翻倍。因此建議對ContentValues填入的內容進行估量,設置合理的初始化容量,減少不必要的內部擴容操作 > * 使用索引加快檢索速度:對于查詢操作量級較大、業務對查詢要求較高的推薦使用索引
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看