久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

android數(shù)據(jù)存儲,android數(shù)據(jù)存儲實驗

Android 輕量級存儲方案(SharedPreferences、MMKV、Jetpack DataStore)

SharedPreferences使用:

創(chuàng)新互聯(lián)公司是專業(yè)的水城網(wǎng)站建設公司,水城接單;提供成都做網(wǎng)站、網(wǎng)站建設、外貿營銷網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行水城網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

SharedPreferencesImpl#EditorImpl.java 中最終執(zhí)行了apply()函數(shù):

創(chuàng)建一個awaitCommit的Runnable任務并將其加入到QueuedWork中,該任務內部直接調用了CountDownLatch.await()方法,即直接在UI線程執(zhí)行等待操作,那么我們看QueuedWork中何時執(zhí)行這個任務。

QueuedWork.java:

waitToFinish()方法會嘗試從Runnable任務隊列中取任務,如果有的話直接取出并執(zhí)行,我們看看哪里調用了waitToFinish():

ActivityThread.java

可以看到在ActivityThread中handleStopActivity、handleStopService方法中都會調用waitToFinish()方法,即在Activity的onStop()中、Service的onStop()中都會先同步等待寫入任務完成才會繼續(xù)執(zhí)行。

所以apply()雖然是異步寫入磁盤,但是如果此時執(zhí)行到Activity/Service的onStop(),依然可能會阻塞UI線程導致ANR。

?? Jetpack DataStore 是一種改進的數(shù)據(jù)存儲解決方案,允許您使用 協(xié)議緩沖區(qū) 存儲鍵值對或類型化對象。

??DataStore 使用 Kotlin 協(xié)程和 Flow 以異步、一致的事務方式存儲數(shù)據(jù)。并且可以對SP數(shù)據(jù)進行遷移,旨在取代SP。如果正在使用 SharedPreferences 存儲數(shù)據(jù),請考慮遷移到 DataStore。

Jetpack DataStore 有兩種實現(xiàn)方式:

1.添加依賴項:

2.構建Preferences DataStore:

當我們構建后,會在 /data/data/package name/files/ 下創(chuàng)建名為 preferences_dataStore 的文件如下:

1.構建Preferences DataStore

2.存儲的實體類:

3.數(shù)據(jù)存儲/獲?。?/p>

Activity中:

ViewModel中:

Repository類中:

SP遷移至Preferences DataStore

如果想將項目的SP進行遷移,只需要在Preferences DataStore在構建時配置參數(shù)3,如下:

這樣構建完成時,SP中的內容也會遷移到Preferences DataStore中了,注意遷移是一次性的,即執(zhí)行遷移后,SP文件會被刪除.

MMKV 是基于 mmap 內存映射的 key-value 組件,底層序列化/反序列化使用 protobuf 實現(xiàn),性能高,穩(wěn)定性強。

1.添加依賴:

2.Application的onCreate方法中初始化

3.數(shù)據(jù)存儲/獲取:

github地址:

Android數(shù)據(jù)存儲之File總結

在使用File存儲App數(shù)據(jù)時,我們需要了解Android系統(tǒng)的存儲系統(tǒng)。Android的存儲分為內部存儲和外部存儲。

由于Android系統(tǒng)的廠商比較多,對于外部存儲目錄的定義有所不同,可能在根目錄下的mnt,sdcard和storage下。以storage為例,打開emulated/0目錄,外部存儲目錄就出現(xiàn)了。雖然可以通過多種路徑打開外部存儲文件,但是最終他們的路徑是相同的:

mnt:

storage:

sdcard:

外部存儲目錄下包含兩大類:公有目錄和私有目錄

私有目錄:

對比下來External有以下幾點優(yōu)點:

缺點:

內部存儲與外部存儲權限申請對比如下:

首先我們要獲取外部存儲目標文件的路徑:

然后確定自己需要創(chuàng)建的文件名,結合上面的到的路徑,創(chuàng)建一個File對象:

Android系統(tǒng)默認數(shù)據(jù)清理的路徑是,內部存儲目錄中相應的cache文件夾中的文件和外部存儲中相應的cache文件夾中的文件。

你的app的internal storage 目錄是以你的app的包名作為標識存放在Android文件系統(tǒng)的特定目錄下[data/data/com.example.xx]。 從技術上講,如果你設置文件為可讀的,那么其他app就可以讀取你的internal文件。然而,其他app需要知道你的包名與文件名。若是你沒有設置為可讀或者可寫,其他app是沒有辦法讀寫的。因此只要你使用MODE_PRIVATE ,那么這些文件就不可能被其他app所訪問。

另外記住一點,內部存儲在你的APP卸載的時候,會一塊被刪除,因此,我們可以在cache目錄里面放置我們的圖片緩存,而且cache與files的差別在于,如果手機的內部存儲空間不夠了,會自行選擇cache目錄進行刪除,因此,不要把重要的文件放在cache文件里面,可以放置在files里面,因為這個文件只有在APP被卸載的時候才會被刪除。還有要注意的一點是,如果應用程序是更新操作,內部存儲不會被刪除,區(qū)別于被用戶手動卸載。

不管你是使用 getExternalStoragePublicDirectory() 來存儲可以共享的文件,還是使用 getExternalFilesDir() 來儲存那些對于你的app來說是私有的文件,有一點很重要,那就是你要使用那些類似DIRECTORY_PICTURES 的API的常量。那些目錄類型參數(shù)可以確保那些文件被系統(tǒng)正確的對待。例如,那些以DIRECTORY_RINGTONES 類型保存的文件就會被系統(tǒng)的media scanner認為是ringtone而不是音樂。

在開發(fā)中,不建議往內部存儲中寫太多的數(shù)據(jù),畢竟空間有限。外部存儲在使用的時候最好能夠將文件存放在私有目錄下,這樣有利于系統(tǒng)維護,也避免用戶的反感。

徹底理解android中的內部存儲與外部存儲

Android存儲挖坑記

緩存文件可以放在哪里?它們各自的特點是什么

Android 文件存儲-將數(shù)據(jù)保存在data目錄下

??在平常使用Android手機的時候,我們都知道,幾乎每一個app都在/data/data/相應的包名的文件夾下保存數(shù)據(jù)。那這些數(shù)據(jù)怎么進行保存的呢?在這里,將簡單的介紹一下。

??Context類中有一個openFileOutPut方法,這個方法可以將我們的數(shù)據(jù)保存在data目錄下的文件里面。

??openFileOutput(String name, int mode)方法中帶兩個參數(shù),第一個參數(shù)是文件名,這里只能寫文件的名字,不能包含路徑,因為所有的數(shù)據(jù)都保存在/data/data/應用包名/files/目錄下;第二個參數(shù)是文件的操作模式,有MDOE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。

??其中MODE_PRIVATE模式的是默認的操作模式,每一次寫入的內容時,都會覆蓋前面的內容;MODE_APPEND模式表示的是每次寫入的內容追加在前面的后面;MODE_WORLD_READABLE表示的是其他應用程序可以對該文件進行寫的操作;MODE_WORLD_WRITEABLE表示的是其他應用程序可以對該文件進行讀的操作。不過在后面的兩種模式過于危險,google已經(jīng)在Android 4.2中廢棄了。

??openFileOutput()方法返回的是一個FileOutPutStream的對象,得到了這個對象,就可以使用Java的IO流來對文件的使用了。

??點擊保存過后,就會把我們的數(shù)據(jù)保存在data目錄下。

??如果我們想要查看的話,就可以在Android studio(我是2.3.2的版本)中找到Tools-Android-Android Device Monitor

??再打開/data/data/應用包名/files/,發(fā)現(xiàn)有一個文件,就是我們之前創(chuàng)建的一個文件。

??我們可以點擊右上角的圖標進行相應的導出工作,對相應的文件進行導出操作。

??在Context類中,與openFileOutput方法對應的是openFileInput方法,用戶從data目錄讀取相應的數(shù)據(jù)。這個方法相較于openFileOutput方法簡單一些。

效果示意圖:

網(wǎng)站欄目:android數(shù)據(jù)存儲,android數(shù)據(jù)存儲實驗
標題鏈接:http://sd-ha.com/article22/dssoscc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設計公司自適應網(wǎng)站、虛擬主機全網(wǎng)營銷推廣、搜索引擎優(yōu)化網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司