Teljesen ismerje az Android fájltárolását - belső tárhelyet, külső tárhelyet és különféle tárolási útvonal-megoldásokat

Completely Understand Android File Storage Internal Storage



Előszó:

Bármely alkalmazáshoz, legyen az PC-oldali vagy Android-alkalmazás, a tárolás mindenképpen elengedhetetlen. Sok olyan hallgató számára, aki Android-fejlesztést végez, úgy lehet tekinteni, hogy a fájlok tárolása nagyon egyszerű. Néhány metódust, például a getFilesDir és a getExternalStorageDirectory, meghívnak, de bár az egyszerű adattárolás megvalósításához meghívják a megfelelő módszert. De nem feltétlenül értik, hol vannak az adatai, és hogy az adatai a helyükön vannak-e, vagy hogy verziókompatibilisek-e. Az alábbiakban válaszolok az ezeken a helyeken elterjedt zűrzavarra:
1, Android belső tárhely, a külső tárolás fogalma
2, a getDataDirectory, getFilesDir, getCacheDir, getDir, getExternalStorageDirectory, getExternalStoragePublicDirectory, getExternalFilesDir, getExternalCacheDir, getExternalCacheDir, getExternalCacheDir, getRootDirectory, getExternalCacheDir, getRootDirectory és egyéb módszerek a különbség és a kapcsolat
3, törölje az adatokat, és a végén törölje a gyorsítótárat, mely adatokat törli
4, a / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0 közötti kapcsolat
5, egy képet, hogy megértsük a különbséget a Ram, Rom, és a kiterjesztett tároló (TF kártya) belső tárhely, a különbség a külső tároló.



Először is, a belső tárolás fogalma az Android-ban, a külső tárolás



Belső tároló
Koncepció: Vegye figyelembe, hogy a belső tárhely nem memória. A belső tároló a rendszer egy speciális helyén található. Ha a fájlokat belső tárhelyen szeretné tárolni, akkor a fájlokhoz alapértelmezés szerint csak az alkalmazás férhet hozzá, és az alkalmazás által létrehozott összes fájl megegyezik az alkalmazáscsomag nevével. Tartalom alatt. Ez azt jelenti, hogy az alkalmazás létrehoz egy belsőleg tárolt fájlt, amely társítva van az alkalmazással. Egy alkalmazás eltávolításakor a belső tárhelyen lévő fájlok is törlődnek. Technikailag elmondható, hogy ha a fájl tulajdonságát olvashatónak állítja be egy belső tárfájl létrehozásakor, más alkalmazások hozzáférhetnek alkalmazásuk adataihoz, feltéve, hogy tudja az alkalmazás csomagnevét, ha egy fájl tulajdonságai privátak (privátak) ), akkor még akkor is, ha tudja a csomag nevét, más alkalmazások nem érhetők el. A belső tárhely nagyon korlátozott, ezért értékes. Ezenkívül maga a rendszer és a rendszeralkalmazások fő adattárolási helye is. Miután a belső tárhely elfogyott, a mobiltelefon nem használható. Tehát a belső tárhely számára meg kell próbálnunk kerülni a használatát. Mind a Megosztott beállítások, mind az SQLite adatbázisok a belső tárhelyen vannak tárolva. A belső tárhelyet általában a Context használatával szerzik be és kezelik.
Hozzáférési API-módszerek a belső tárhelyhez:
1, Environment.getDataDirectory ()
2, getFilesDir (). GetAbsolutePath ()
3 、 getCacheDir (). GetAbsolutePath ()
4 、 getDir („myFile”, MODE_PRIVATE) .getAbsolutePath ()
Külső tárhely
Koncepció: A legzavaróbb a külső tárhely, mert a régi Android rendszer eltér az új Android rendszertől. Sokan az interneten keresnek információkat, és megnézik a korábbi adatokat. Megnéztem az aktuális információkat, de megállapítottam, hogy különböznek egymástól, majd összezavarodtak. Először is beszéljünk egy közös koncepcióról. 'Ha megkülönbözteti a külső és a belső tárhelyet a számítógépen, akkor a számítógéphez kapott merevlemez belső tárhely, az USB flash meghajtó vagy a mobil merevlemez pedig külső tároló.' Nagyon sok ember hozza ezt a megértést. Nézze meg az Android telefont, a beépített tárhelyet (testtárolót) belső tárhelyként, és a kiterjesztett SD-kártyát külső tárhelyként. Ez valóban igaz, mert a 4.4 (API19) előtti mobiltelefonokon igaz. A memóriakártya, amelyet maga a telefon hordoz, belső tárhely, a kiterjesztett SD-kártya pedig külső tárhely. A 4.4-es rendszerből kiindulva azonban sok közepes és csúcskategóriás gép saját testtárolóját több mint 8G-ra bővítette. Például egyesek mobiltelefonja 16G, mások mobiltelefonja 32G, de ez a 16G, 32G belső. Tárolja, nem! ! ! Ezek továbbra is külső tárolók, ami azt jelenti, hogy a 4.4-es és annál magasabb szintű mobiltelefon-tárhelyek (magát a mobiltelefon tárhelyét testtárolónak is nevezik) fogalmilag „belső belső” és „külső külső” tárolókra vannak felosztva. . Mivel a 16G és a 32G külső tárhely, néhány embernek kétségei vannak. Ha a 4.4-es és újabb rendszert SD-kártyához csatlakoztatják, akkor mi az SD-kártya? Ha az SD-kártyát külsőleg is tárolják, hogyan lehet megkülönböztetni a testtárolót? Külső és külső tárhely az SD-kártyán? Igen, az SD-kártya szintén külső tárhely, így hogyan lehet megkülönböztetni, hogy a rendszerben a 4.4 után az API egy ilyen módszert biztosít a telefon külső tárolási útvonalának áthaladásához:



File[] files if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { files = getExternalFilesDirs(Environment.MEDIA_MOUNTED) for(File file:files){ Log.e('main',file) } }

Ha mobiltelefonja SD-kártyához van csatlakoztatva, akkor kétféle módon lehet nyomtatni. Például a Huawei Glory 7 készülékembe SD-kártya van behelyezve. Az eredmény a következő:
/ storage / emulated / 0 / Android / data / packname / files / mounted
/ storage / B3E4-1711 / Android / data / packname / files / csatlakoztatott
ahol a / storage / emulated / 0 könyvtár a törzs tárolásának külső tárhelye
és / storage / B3E4-1711 / az SD-kártya útvonala
Ezeket együttesen külső tárolónak nevezzük
API-módszer a külső tárhely eléréséhez:
1, Environment.getExternalStorageDirectory (). GetAbsolutePath ()
2 、 Environment.getExternalStoragePublicDirectory („”). GetAbsolutePath ()
3 、 getExternalFilesDir (“”). GetAbsolutePath ()
4, getExternalCacheDir (). GetAbsolutePath ()
Mindenkinek kétségei vannak az Android külső tárhelyével kapcsolatban. A fő ok az, hogy sok mobiltelefon fizikailag nem látta a külső tárhelyet. A korábbi mobiltelefonok ugyanolyan típusú fekete memóriakártyával rendelkeznek, 8G, 16G, 32G, amelyek olyanok lehetnek, mint az U lemez be- és kihúzása. Régen nagyon népszerű volt. Ha a tárhely nem elegendő, veszek egy memóriakártyát (pontosabban szólva, ez egy SD kártya, ami állítólag a memóriakártya félreértése). Később például a mobiltelefon, most a Huawei glory 7-et használom. A gyártó kiterjesztette a törzs tárhelyét 16G-ra, de a tárolási koncepció belső tárolóra (belső belső) és külső tárolóra (külső külső) oszlik, sőt, integráltak. Természetesen, ha úgy gondolja, hogy a 16G nem elég, akkor támogatja-e a kapacitás bővítését SD-kártya behelyezésével? Például a 7-es dicsőség, ez egy három az egyben kártyahely. 1. kártyahely: Nano SIM-kártyahely: 2. Nano SIM-kártya vagy Micro SD-kártya. Az alapértelmezett 1. kártyahely egy 4G-s főkártya. A beállításokban megváltoztathatja a 4G főkártya-foglalatot. Nem támogatja a hot swap-ot. A kártya csatlakoztatása és kihúzása után újra kell indítania a telefont. Az így behelyezett SD-kártya külsőleg is tárolódik. Tehát a telefon külső tárolója két részt tartalmazhat, az egyik a testház külső tároló része, a másik pedig az SD kártya része.

Másodszor, a getDataDirectory, getFilesDir, getCacheDir, getDir, getExternalStorageDirectory, getExternalStoragePublicDirectory, getExternalFilesDir, getExternalCacheDir, getExternalCacheDir, getRootDirectory különböző androidos verziói közötti különbség

Ezekkel a módszerekkel már találkozhattunk korábban, de néhány hallgató számára nehéz megkülönböztetni, elsősorban az Android különböző verzióinak problémája. Mindenki megértésének megkönnyítése érdekében röviden bemutatom a fenti módszereket. Mindenki kényelme érdekében kinyomtatom ezeknek a módszereknek az eredményeit (a következő nyomtatási eredmények a Glory 7 (rendszerverzió 6.0) alapján készülnek:
1 、 Environment.getDataDirectory () = / adatok
Ez a módszer a belső tároló gyökérútjának megszerzésére szolgál
2, getFilesDir (). GetAbsolutePath () = / data / user / 0 / packname / files
Ez a módszer az alkalmazás fájlok elérési útjának megszerzését a belső tárhelyen.
3, getCacheDir (). GetAbsolutePath () = / data / user / 0 / packname / cache
Ezzel a módszerrel az alkalmazás gyorsítótár elérési útját meg lehet kapni a belső tárhelyen.
4 、 getDir („myFile”, MODE_PRIVATE) .getAbsolutePath () = / data / user / 0 / packname / app_myFile
Ez a módszer egy alkalmazás egyéni elérési útjának megszerzésére szolgál a belső tárhelyen
A 2., 3. és 4. módszer elérési útjainak csomagnevei vannak, jelezve, hogy egy alkalmazáshoz tartoznak.
…………………………………………………………………………………………
5 、 Environment.getExternalStorageDirectory (). GetAbsolutePath () = / storage / emulated / 0
Ez a módszer a külső tároló gyökérútvonalának megszerzésére szolgál
6 、 Environment.getExternalStoragePublicDirectory (“”). GetAbsolutePath () = / storage / emulated / 0
Ez a módszer a külső tároló gyökérútvonalának megszerzésére szolgál
7 、 getExternalFilesDir (“”). GetAbsolutePath () = / storage / emulated / 0 / Android / data / packname / files
Ez a módszer az alkalmazás fájlok elérési útjának megszerzését a külső tárhelyre.
8. 、 getExternalCacheDir (). GetAbsolutePath () = / storage / emulált / 0 / Android / data / packname / cache
Ez a módszer egy alkalmazás gyorsítótárának elérési útját kapja meg a külső tárhelyen.
jegyzet: A 7. és a 8. módszer null értéket ad vissza, ha a getExternalFilesDir ('') és a getExternalCacheDir () a rendszerben 4.4 előtt van. Ha a rendszer 4.4-es vagy annál magasabb, akkor a fenti eredmény visszatér, vagyis a 4.4 előtti rendszert nem helyezzük be az SD-kártyába. Ha nincs külső tárhely, akkor az SD-kártyája megegyezik a külső tárhelyével, és a 4.4-es, majd a későbbi rendszer külső tárhelye két részből áll, a getExternalFilesDir ('') és a getExternalCacheDir () kapják meg a test tárhelyének külső tárhelyét, azaz 4.4-et és újabbakat rendszerekbe, nem helyezi be az SD-kártyát, hanem külső tárhelye is van, mivel a getExternalFilesDir ('') és a getExternalCacheDir () megkapja a testtároló külső tároló részét, az SD-kártya tárolási útvonalának megszerzését, vagy a fentebb megkapjuk az említett getExternalFilesDirs (Környezet.MEDIA_MOUNTED) metódust. Nem tudom, hogy az Android biztosítja-e a megfelelő API-felületet az SD-kártya tárolási útvonalának megszerzéséhez. Ellenőrizheti az adatokat. Ismételte a fenti szavakat, főleg, hogy mindenkit emlékeztessen arra, hogy figyeljen a különböző Android verziók közötti különbségre, ez a leginkább gödör.
…………………………………………………………………………………………
Environment.getDownloadCacheDirectory () = / cache
Environment.getRootDirectory () = / rendszer
Ennek a két módszernek nincs mondanivalója, az android rendszer minden változata ugyanaz
…………………………………………………………………………………………
A fentiekből jól látható, hogy a fenti módszerek három kategóriába sorolhatók, vízszintes vonalakkal választottam el őket. Az első osztály a gyökérkönyvtárban / adatokban található, és a gyökérkönyvtárban / tárolóban is található egy osztály, láthatja, hogy az őket meghívó API módszer rendelkezik külsővel, a másik osztály nem tartozik a / data, / Storage, például a rendszerfájl / rendszer vagy a gyorsítótárfájl / gyorsítótár.
A / data könyvtárban lévő fájlokat fizikailag abban tárolják, amit általában belső tárolónak hívunk.
A / storage könyvtár fájljait fizikailag abban tárolják, amit általában külső tárolónak hívunk.
A / system a rendszerfájlok tárolására szolgál, a / cache néhány cache fájl tárolására szolgál, fizikailag a belső tárolóban is tárolódnak.
Vessünk egy pillantást a mindenki által feltett kérdésekre.
1. kérdés: mi a különbség a getFilesDir (). GetAbsolutePath () és a getCacheDir (). GetAbsolutePath () között?
Nincs különbség, megnézhetjük a következő képet:
kép
A getFilesDir megkapja a fájlok könyvtárát, a getCacheDir megkapja a gyorsítótár könyvtárat, ugyanabban a könyvtárban vannak, csak a különböző típusú adatok tárolásához, a fájlnevet nem nehéz meglátni: cache A tárolt adatok tárolása, az SQLite-ben tárolt adatok tárolása a adatbázisban tárolja a normál adatokat (naplóadatokat, json típusú adatokat stb.) a fájlok alatt, és a SharedPreference által tárolt adatokat a shared_prefs alatt. Ezeket a mappákat a rendszer hozza létre.
2. kérdés, mi a különbség a getFilesDir (). GetAbsolutePath () és a getExternalFilesDir (''). GetAbsolutePath () között?
Először nézzük meg az útjukat:
/ data / user / 0 / packname / files
/ storage / emulated / 0 / Android / data / packname / files
Nyilvánvaló, hogy a kettő közötti különbség egy a belső és egy a külső tárolóban, ami a különbség közöttük. Közös bennük, hogy útjaikat csomagnév kíséri, jelezve, hogy ez az APP saját fájlja. Az ilyen fájlokat az alkalmazás eltávolításával együtt törölni kell, és a beállításokban eltávolítjuk az alkalmazás adatait. A két mappában lévő adatok törlődnek.
3. kérdés, mi az APP-specifikus dokumentum?
A fenti 2. kérdésben megemlítettük az exkluzív fájlt, az úgynevezett exkluzív fájl az, hogy egy adott alkalmazáshoz tartozik, és a fájl elérési útjának megvan a megfelelő csomag neve, amikor az APP eltávolításra kerül, az alkalmazással együtt eltávolításra kerülnek, és amikor manuálisan törölünk egy alkalmazás adatait a beállításokban (nem töröljük a gyorsítótárat), akkor azokat együtt is törli. Ennek a tulajdonosi fájlnak az Android számára történő használatának célja a fájlkezelés megkönnyítése és a fájlok véletlenszerű tárolásának elkerülése, ami rendetlen. A másik cél az, hogy az alkalmazás eltávolításakor ne hagyjon sok szemetet.
4. kérdés. Mivel mind a belső, mind a külső tárhely rendelkezik APP-specifikus fájlokkal, melyiket használjuk?
Mind a belső, mind a külső tárhely rendelkezik APP-specifikus fájlokkal. Melyiket használjuk? Nyilvánvaló, hogy külső tárhelyet kell használni, mert maga a belső tárhely viszonylag kicsi, és néhány rendszert tároltak. Fájlok, ezért a belső tárhelyet megpróbáljuk nem használni. De amikor a telefonnak nincs külső tárhelye, akkor is a belső tárhelyet kell használnunk. Általában a programozó fogja megítélni, hogy van-e külső tároló és nincs-e belső tárhely. A kód a következő:



public static String getFilePath(Context context,String dir) { String directoryPath='' If (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ) {/ / Determine if external storage is available directoryPath =context.getExternalFilesDir(dir).getAbsolutePath() }else{//Use internal storage without external storage directoryPath=context.getFilesDir()+File.separator+dir } File file = new File(directoryPath) If(!file.exists()){//determines whether the file directory exists file.mkdirs() } return directoryPath }

Annak érdekében, hogy mindenki jobban megértse az Android rendszer különböző verziói közötti tárolási különbségeket, elkészítettem a következő leírási táblázatot:
összehasonlítja a 19,48 millió adat írása előtti és utáni különbségeket a getFilesDir (). getAbsolutePath () és a getExternalFilesDir (''). getAbsolutePath () elérési utakkal.
1. táblázat, 4.1.1 rendszer SD-kártyával (valós gép)

tárolási hely Útvonal megszerzésének módja Kapacitás (írás előtt) Kapacitás (írás után) Megjegyzések
/ data / data / packname / files getFilesDir () 1,59 GB 1,57 GB Belső tároló
/storage/sdcard0 getExternal
StorageDirectory ()
1,47 GB 1,45 GB Külső tárhely (SD-kártya)

2. táblázat, 4.1.1 rendszer, SD kártya nélkül (valós gép)

tárolási hely Útvonal megszerzésének módja Kapacitás (írás előtt) Kapacitás (írás után) Megjegyzések
/ data / data / packname / files getFilesDir () 1,59 GB 1,47 GB Belső tároló
Útvonal nem létezik getExternal
StorageDirectory ()
~~~ ~~~ Nincs behelyezve SD-kártya

3. táblázat, 4.2.1 rendszer SD-kártyával (szimulátor)

tárolási hely Útvonal megszerzésének módja Kapacitás (írás előtt) Kapacitás (írás után) Megjegyzések
/ data / data / packname / files getFilesDir () 1,85 GB 1,83 GB Belső tároló
/ mnt / sdcard / getExternal
StorageDirectory ()
98,42MB 78,93MB Külső tárhely (SD-kártya)

4. táblázat, 4.4.2 rendszer SD-kártyával (valós gép)

tárolási hely Útvonal megszerzésének módja Kapacitás (írás előtt) Kapacitás (írás után) Megjegyzések
/ data / data / packname / files getFilesDir () 2,22 GB 2,18 GB Belső tároló
/storage/sdcard1 getExternal
StorageDirectory ()
2,20 GB 2,16 GB Külső tárhely
/ storage / emulated / 0 / Android
/ data / packname / files
getExternalFilesDirs 1,47 GB 1,47 GB Külső tárhely (SD-kártya)
nem írt rá adatokat, csak olvasta)

5. táblázat, 4.4.2 rendszer, SD kártya nélkül (valós gép)

tárolási hely Útvonal megszerzésének módja Kapacitás (írás előtt) Kapacitás (írás után) Megjegyzések
/ data / data / packname / files getFilesDir () 2,22 GB 2,18 GB Belső tároló
/ storage / emulált / 0 getExternal
StorageDirectory ()
2,20 GB 2,16 GB Külső tárhely

6. táblázat: 6.0.0 rendszer SD kártyával (valós gép)

tárolási hely Útvonal megszerzésének módja Kapacitás (írás előtt) Kapacitás (írás után) Megjegyzések
/ data / user / 0 / packname / files getFilesDir () 11,94 GB 11,90 GB Belső tároló
/ storage / B3E4-1711 getExternal
StorageDirectory ()
11,92 GB 11,88 GB Külső tárhely
/ storage / emulated / 0 / Android
/ data / packname / files
getExternalFilesDirs 1,47 GB 1,47 GB Külső tárhely (SD-kártya)
nem írt rá adatokat, csak olvasott

VII. Táblázat, 6.0.0 rendszer, SD kártya nélkül (valós gép)

tárolási hely Útvonal megszerzésének módja Kapacitás (írás előtt) / tárhely / kapacitás (írás után) Megjegyzések
/ data / user / 0 / packname / files getFilesDir () 11,93 GB 11,89 GB Belső tároló
/ storage / emulált / 0 getExternal
StorageDirectory ()
11,91 GB 11,87 GB Külső tárhely

Megjegyzés: A fenti kapacitás az elérési út gyökérútjának elérhető kapacitására utal. Például a / data / data / packname / files kapacitása a / data elérhető kapacitására utal, / storage / sdcard0 / Android / data / packname / files a / storage / sdcard0 rendelkezésre álló kapacitásra vonatkozik, és általában a 4.4-es rendszerekben és felett, ritkán működtetjük az SD-t

Harmadszor törölje az adatokat, és végül törölje a gyorsítótárat

Ezt könnyű összekeverni, miért? A fentieken keresztül tudjuk:
/ data / user / 0 / packname / files A normál adatok tárolására szolgál.
/ data / user / 0 / packname / cache A tárolt adatok tárolására szolgál.
Olyan sokan gondolják, hogy amikor törlöm az adatokat, akkor mindenképpen a fájlok alatti adatok. Amikor törlöm a gyorsítótárazott adatokat, mindenképpen a gyorsítótár alatti adatok, de ez nem így van. A helyesnek kell lennie:
törölje a gyorsítótárat : Tudjuk, hogy az alkalmazásnak sok folyamaton kell keresztülmennie a futó folyamat során, például a programok beolvasása, számítások, bemenetek és kimenetek stb. Ezek a folyamatok biztosan sok adatot generálnak, memóriában vannak, és akkor hívják őket, amikor a program fut. Ezért a gyorsítótár törlése törli az APP futtatása során keletkezett ideiglenes adatokat.
adatok törlése : Az adatok törlése a fájlba mentett adatok tényleges törlése (az állandó adatok, ha manuálisan nem törlésre kerülnek, a fájlba kerülnek). Például, amikor a beállításokban töröljük egy alkalmazás adatait, akkor / data A / user / 0 / packname / és / storage / emulated / 0 / Android / data / packname / fájlban lévő adatok törlődnek, beleértve a gyorsítótárat, a fájlokat , lib, shared_prefs és így tovább.

Negyedszer, a / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0 közötti kapcsolat

A fenti táblázatból láthatjuk, hogy a 4.1-es rendszerben a getExternalStorageDirectory metódussal elért útvonal a / storage / sdcard0, a 4.2-es rendszer getExternalStorageDirectory metódusával elért útvonala pedig a / mnt / sdcard, mert a 4.2 a szimulátor nyomtatás. Ha valódi gépről van szó, akkor a / storage / sdcard0 egyben a 4.4-es getExternalStorageDirectory módszerrel kapott útvonal is / storage / emulated / 0, SD-kártyájának tárolási útvonala a / storage / sdcard1 a getExternalStorageDirectory 6.0 módszerrel kapott út a / storage / emulated / 0, SD-kártya tárolási útvonala a / storage / B3E4-1711, ezen felül a getExternalStorageDirectory metódus 4.0 tesztelésével kapott útvonal a / mnt / sdcard. Tehát a valós gépen a getExternalStorageDirectory által elért útvonal a következő táblázatban látható:

rendszer verziója eredmény
4.0 / mnt / sdcard
4.1 / storage / sdcard0
4.2 / storage / sdcard0
4.4 / storage / emulált / 0
6.0 / storage / emulált / 0

A / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0 kapcsolatának megértéséhez először meg kell értenünk a linux fájlcsatlakozás fogalmát, a Baidu-ra léphet a mounton. És nem értjük, miért van olyan sok könyvtár, mint a / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0, ami elkápráztatja az embereket. Ha többet szeretne megtudni, kérjük, olvassa el figyelmesen az alábbi cikket alább. A cikk tőlem származik. Részletes magyarázat az android 4.2 0 mappájához
- android 4.0 -
A galaxy nexus (GN) telefon felhasználói adatpartíciója nagyon nagy, és az / data könyvtárban van felakasztva. A felhasználó adatait általában az SD-kártyán helyezik el, de a GN-nek nincs SD-kártyája, ezért a Google egyfajta virtuális megoldást gondolt.
Tehát a felhasználói adatok partícióban található egy média nevű könyvtár, amely a beépített SD-kártya adattárolási helye. A biztosítéktechnológiával virtualizálhatja az / adatokat / adathordozókat a / dev / fuse nevű eszközbe. Annak érdekében, hogy a program felismerje, egyidejűleg az / mnt / sdcard könyvtárba van telepítve, és annak érdekében, hogy kompatibilis legyen az előző programmal, egy parancsikont készítenek (Linux rendszeren soft kapcsolatnak hívják) / sdcard pontok to / mnt / sdcard.
Természetesen ezek mind a 4.0 gyakorlatok.
- android 4.1 -
A 4.1-es verzióban a biztosíték technikát is alkalmazzák. A / dev / fuse egyidejűleg a / storage / sdcard0 könyvtárba lesz csatlakoztatva. Ez az sdcard0 jelzi az első sd kártyát (ha van külső Sd kártya, akkor lesz még egy / storage / sdcard1, például az én xoom), / sdcard soft kapcsolat a / storage / sdcard0 pontra mutat, majd / mnt / sdcard puha kapcsolat is a / storage / sdcard0 fájlra mutat.
Ha az U lemezt otg vonalon keresztül csatlakoztatja, akkor az a / storage / usb0 könyvtárba kerül. A Stickmount szoftver látja az u lemezt könyvtár, gyors térkép, mx lejátszó és egyéb szoftverek számára. A benne lévő adatok a / storage / sdcard0 / usStorage / sda1 fájlhoz is csatlakoznak.
Talán megkérdezed, miért nem az usb0, hanem az sda1, ez a merevlemez elnevezésének linuxos módja, ha az u lemezednek több partíciója van, akkor ez sda1, sda2 Ez kiürült.
- android 4.2 -
Ok, kezdjük a 4.2-es rendszerrel.
A Google nincs rendben, androidnak több felhasználót kell adnia, gondolkodik rajta, Kínában, talán gazdasági problémák miatt a család nem egy személy, az Egyesült Államokban szinte az emberek, akiknek szükségük van számítógépre, van egy vagy több közülük, és nagyon kevés olyan eset van, amikor egy számítógépet sokan használnak. Ezért hívják PC-nek, amint a neve is sugallja, személyi számítógépnek. Az olyan dolgok, mint a mobiltelefonok és a táblagépek, személyesebbek és ritkán oszthatók meg, azt hiszem, Kínában.
Természetesen a Google-t nem teljesen kísértik, mert nagyobb a stratégiai telepítése, és a táblagépre több ember is képes.
Tehát a Google több felhasználót hozott létre, és mindenki alkalmazását, adatait és személyiségkonfigurációját el kell különíteni. Az alkalmazás és a személyiség konfigurálása elvégezhető, gondoljon bele, a beléptető vezérlés révén minden ember csak a saját alkalmazásait láthatja, az asztal is használhatja a sajátját.
Mi a helyzet az adatokkal? ? ? ?
Ok, állítsa be a felhasználói adatok felépítési szerkezetét. Android 4.2, szintén használja a biztosíték technológiát / dev / fuse csatlakozik a / storage / emulated / 0 könyvtárba, miért 0, még mindig emlékszel a fenti sdcard0, az első jelentése. (Ha van egy második, akkor a / storage / emulated / 1 értéknek kell lennie, három fiunknak nincs külső SD-kártyája, így nincs mód ellenőrizni)
Annak érdekében, hogy kompatibilis legyen az előzővel, csatlakoztassa a / storage / emulated / legacy (átnevezett, hagyományos) fájlhoz, hozzon létre három puha kapcsolatot is: / storage / sdcard0, / sdcard, / mnt / Sdcard, mindkettő a / storage / emulated / legacy oldalra mutat
Sok hallgató nem veheti komolyan a fentieket, itt röviden összefoglalom:
1, ahol az sdcard /, mnt / sdcard, storage / sdcard0, storage / emulated / 0, storage / emulated / legacy mind ugyanazon útvonal különböző 'mutatói', ugyanarra az Egy helyre mutatnak, csak a különböző Android verziókat másképp hívják .
2. Ha meg akarja ismerni az egyes verziók külső tárhelyét, a hallgatók összehasonlíthatják a getExternalStorageDirectory módszer nyomtatási eredményeit.

Öt, egy kép, hogy megértsük a különbséget a Ram, Rom és a kiterjesztett tárolású (TF kártya) belső tárhely között, a külső tárhely közötti különbséget.

kép
1. Először találjunk ki néhány fogalmat, a memóriát, a belső tárhelyet, a külső tárhelyet és a testtárolót (beépített tárhely).
1.1 memória angolul memóriának hívjuk, a memória a számítógép egyik fontos része, ez híd a CPU-val való kommunikációhoz. A számítógép összes programja a memóriában fut, így a számítógép futtatására szolgál, nem pedig adatok tárolására.
1.2 belső tárhely, külső tároló belső tárhely, amelyet InternalStorage-nak hívunk, külsőleg pedig ExternalStorage-nak hívjuk, ez a két fogalom az Android korai intelligens gépéből származik, a 4.4 előtt a beépített tároló belső tároló A külső SD-kártya külső tárhely. Megszerezhetjük a belső tároló gyökérútját a getDataDirectory segítségével, a külső SD kártya gyökérútját pedig a getExternalStorageDirectory segítségével. A 4.4 után a külső tároló két részből áll, amelyekből a testtároló külső tárhelye a getExternalStorageDirectory útján történik, a külső SD-kártyát pedig a getExternalDirs bejárásával kell megszerezni.
Az 1.3 karosszériatest-tároló a telefon maga által hordozott, a gyárból már szállított tárhelyre vonatkozik, 4.4, mielőtt a törzsraktár belső tároló lenne, 4.4-es és későbbi karosszériatároló tartalmaz belső és külső tárolót.
2, Ram, Rom, és a kiterjesztett tárolás fogalma (TF kártya). Amint a képen látható, a mobiltelefon memóriával, beépített memóriával és SD kártyával rendelkezik. Ezek Ram, Rom és TF kártyák. E három kártya teljesítménye, anyaga és ára eltérő. Hasznos.
3, a belső tárolás, a külső tárolás fogalma. Sokan félreértik ezt, azt gondolva, hogy a testtároló memória, az SD-kártyát pedig külső tárolónak hívják, ami valójában téves, a különböző Android-verziók eltérnek egymástól, kérjük, olvassa el az első cikket.
Végül a példám csatolva van:
http://download.csdn.net/download/u010937230/9930396