日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android开发关于和使用本机内存,内置存储卡和外置存储卡大揭秘

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android开发关于和使用本机内存,内置存储卡和外置存储卡大揭秘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.2cto.com/kf/201304/204729.html


android開發關于和使用本機內存,內置存儲卡和外置存儲卡

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 關于android存儲器簡介: android開發常常需要涉及數據緩存,這就需要我們了解手機當前使用的內存狀況,是否存在外置存儲卡,如果有怎么辦,沒有是否使用內置存儲卡。 首先手機本機存儲器,有Rom,Ram。 Rom ?:在android中Rom相當于系統盤,當C盤用 ,很多時候要使用需要獲取root權限。 一般可以分為機身內存和內置存儲(三星的多是叫:USB存儲器); 機身內存包括system、data和cache等分區目錄,軟件默認都是安裝機身內存或者內置存儲卡里的 。 data(就是手機儲存總量)+system(手機系統占用) 具體看是什么手機; Ram:在相當于電腦的運行內存,運存 ?。不多做解釋,就是隨機運行時內存,斷電數據全部消失。 外置存儲器有:手機存儲器 (TF卡), 相當于D,E ,F 等硬盤。 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- android開發中讀取手機存儲器和外置存儲器。 Android讀取手機內存之機身內存 這個我反復試驗過,可以弄入以及讀取數據到data目錄下,但是需要獲取root權限,這個真有點糾結,難道要使用**軟件的人都去root下?。嘿嘿,所以這里不推薦,這里就不粘貼代碼了........ Android讀取手機內存之內置存儲器實例 下面給出一個小例子來說明如何Android讀取手機內存里的文件,這在Android開發中是比較重要的一部分,如何要是掌握不好的話,我們就沒法把數據庫里保存的數據給讀出來,也就是說我們我們每一次玩游戲的時候,我們的數據庫都是最原始的數據,這樣就會給我們帶來很多的麻煩。如果出現這樣的事情,那么你的應用就是非常爛的,代碼如下: [java] view plaincopy public static InputStream readInternalFileInputStream(Context context,String fileName){ ? ? ? /** ? ? * 讀取手機內存文件 ? ? * ? ? */ ? ? ? try{ ? ? ? FileInputStream fis = context.openFileInput(fileName); ? ? ? return fis; ? ? ? }catch(Exception e){ ? ? ? return null; ? ? ? } ? ? ? } ? ? ? public static String readInternalFile(Context context,String fileName){ ? ? ? /** ? ? * 讀取手機內存文件 ? ? * ? ? */ ? ? ? try{ ? ? ? byte[] buffer = new byte[512]; ? ? ? int read =0; ? ? ? StringBuffer stringbuffer = new StringBuffer(); ? ? ? FileInputStream fis = context.openFileInput(fileName); ? ? ? do{ ? ? ? read = fis.read(buffer); ? ? ? if(read>0) ? ? ? stringbuffer.append(new String(buffer, 0, read, "utf-8")); ? ? ? }while(read!=-1); ? ? ? fis.close(); ? ? ? return stringbuffer.toString(); ? ? ? }catch(Exception e){ ? ? ? return null; ? ? ? } ? ? ? } ? ?? 外置內存 android 讀取sd卡中的圖片 一 讀取sd卡中的圖片 1 獲取讀取sd的權限 在AndroidMainfest.xml文件中添加 [java] view plaincopy <!-- 在SDCard中創建與刪除文件權限 --> ? <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></uses-permission> ? <!-- 往SDCard寫入數據權限 --> ? <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission> ? <uses-permission android:name="android.permission.RESTART_PACKAGES" ></uses-permission> ? 注意:在<application...></application>前添加 2 找到sd卡的目錄(以真機的情況說明) /** *圖片文件路徑 *打印Environment.getExternalStorageDirectory()得到:"/mnt/sdcard",即找到了sd卡的根目錄 */ [java] view plaincopy public String filePath=Environment.getExternalStorageDirectory()+"/client/tile/1_0_0.jpg"; ? 3 根據路徑獲取圖片 ? ? [java] view plaincopy File mfile=new File(path); ? if (mfile.exists()) {//若該文件存在 ? Bitmap bm = BitmapFactory.decodeFile(path); ? return bm; ? } ? 二 注意事項 在讀取sd卡中圖片的過程中的一些可用判斷 1 Environment.getExternalStorageState()獲取路徑是否成功 /*如獲取成功,返回值為MEDIA_MOUNTED*/ [java] view plaincopy if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) ? { ? String filePath=Environment.getExternalStorageDirectory().getPath(); ? } ? 2 獲取sd卡的權限成功 /*fileName=Environment.getExternalStorageDirectory()+"/client" 是個文件夾目錄*/ [java] view plaincopy File f = new File(fileName); ? //可讀 ? if(f.canRead()) ? Log.v("EagleTag","very bad"); ? //可寫 ? if(f.canWrite()) ? Log.v("EagleTag","very good"); ? -------------------------------------------------------------------------------------------------------------- android的data和system以及cache系統目錄講解 /system 存放的是rom的信息; /system/app 存放rom本身附帶的軟件即系統軟件; /system/data 存放/system/app 中核心系統軟件的數據文件信息。 /data 存放的是用戶的軟件信息(非自帶rom安裝的軟件); /data/app 存放用戶安裝的軟件; /data/data 存放所有軟件(包括/system/app 和 /data/app 和 /mnt/asec中裝的軟件)的一些lib和xml文件等數據信息; /data/dalvik-cache 存放程序的緩存文件,這里的文件都是可以刪除的。 /sdcard和/mnt/sdcard一樣嗎?/mnt/asce是干嘛用的? 我來談談/mnt/asce目錄 1、android升級到2.2以上,出現了這個目錄,這個目錄是干什么的呢? 2、2.2以上,出現了新的功能,應用可以安裝的sd卡上,哪到底安裝在哪兒呢?我找遍了整個卡結果發現了所有這些應用安裝在.android 的asecure目錄下,要把卡放到讀卡器上去看才知道。 3、那是如何與系統發生關系的,學過unix的人都知道,mnt是在/下的一個目錄,sd卡是通過mount掛接上去的,/mnt叫掛接點,系統就能通過掛接點/mnt訪問sd卡了 4、在/mnt下有三個目錄如下:asec、secure、sdcard 其中asec就是我們安裝在卡上的應用、secure是用于sd卡應用程序安裝路徑加密的吧自己猜想的、sdcard就是卡上的其他內容。 /mnt/asce實際上對應的真正物理目錄是/mnt/sdcard/.android_secure(記住android_secure前有個點,這是個隱藏目錄) 我們回過來看/sdcard和/mnt/sdcard就容易理解: /sdcard 目錄,這是一個軟鏈接(相當于windows的文件夾的快捷方式),鏈接到/mnt/sdcard 目錄,即這個目錄的內容就是sdcard的內容。 因此,用戶程序安裝到到sd卡上后,其內容可能分散到:/mnt/asec , /mnt/secure , /data/data 。 要實現app2sd,目前比較流行有兩種方案,分別是app2ext 和 data2ext,下面分別介紹下這2種方案。 app2ext的原理是,刪除data區中的app文件夾,然后在sd卡的ext分區上創建一個app文件,并通過軟鏈接映射到data區。這樣系統會以為,app這個軟鏈接是一個真實的文件夾,會把程序都安裝在里面,但實際上,這些程序都安裝到卡上了。但由于操作系統并不知道,所以這種情況下,我們依然看到系統顯示這個程序是安裝在“內置空間”的。 data2ext則更徹底,它不是用軟鏈接,而是直接用“掛載”功能,Linux下所有的存儲設備都必須掛載成一個文件夾才能進行文件操作(如sd卡就掛載在/mnt/sdcard目錄下面)。data文件夾本來是對應手機內部Flash中的一個分區(為了保持術語的準確,這里要把內部Flash和內存相區別,內部Flash是ROM,內存是RAM)。而data2ext則是修改了掛載對應關系,使data文件夾掛載的不是內置Flash,而是sd卡的整個ext分區。這樣,不僅是app,連存儲程序設置的data和緩存dalvik-cache都會存儲到sd卡中。 可以看到,dalvik-cache和data這兩個文件夾的位置,是這兩種方式的一個重大區別。其中dalvik-cache是虛擬機預編譯緩存,data(不同于/data,這個是/data/data)是存儲程序數據的地方,例如游戲的存檔記錄,軟件的配置信息等。這樣有什么區別,區別在于假如你重刷了ROM,app2ext的話,所有的程序都可以保留,但是這些程序的配置信息和游戲的存檔都會丟失。而data2ext則可以連同配置和存檔都保留,但是dalvik-cache也是一個容易積累垃圾的地方,這些垃圾也會一同保留。 data2ext由于是把整個data分區都放在sd卡上,因此,我們刷ROM需要WIPE的時候,這個data分區的內容就可能不會被wipe,這可以保存用戶的個人資料,但是也可能造成系統莫名其妙的故障。

總結

以上是生活随笔為你收集整理的android开发关于和使用本机内存,内置存储卡和外置存储卡大揭秘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。