Ymmärrä täysin Android-tiedostotallennus --- sisäinen tallennustila, ulkoinen tallennustila ja erilaiset tallennuspolkuratkaisut

Completely Understand Android File Storage Internal Storage



Esipuhe:

Kaikille sovelluksille, olipa kyseessä sitten PC-puoli tai Android-sovellus, tallennus on ehdottomasti välttämätöntä. Monille Android-kehitystä tekeville opiskelijoille voidaan ajatella, että tiedostojen tallennus on hyvin yksinkertaista. Joitakin menetelmiä, kuten getFilesDir ja getExternalStorageDirectory, kutsutaan, mutta vaikka ne kutsuvat vastaavaa menetelmää yksinkertaisen tietojen tallennuksen toteuttamiseksi. Mutta he eivät välttämättä ymmärrä missä hänen tietonsa ovat ja onko hänen tietonsa paikoillaan vai ovatko ne yhteensopivia version kanssa. Alla vastaan ​​näiden paikkojen yleiseen hämmennykseen:
1, Androidin sisäinen tallennustila, ulkoisen tallennustilan käsite
2, getDataDirectory, getFilesDir, getCacheDir, getDir, getExternalStorageDirectory, getExternalStoragePublicDirectory, getExternalFilesDir, getExternalCacheDir, getExternalCacheDir, getExternalCacheDir, getRootDirectory ja muut erotus- ja yhteysmenetelmät
3, tyhjennä tiedot ja tyhjennä välimuisti lopulta mitkä tiedot tyhjennetään
4, suhde / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0
5, kuva ymmärtää eroa Ram, Rom, ja laajennettu varastointi (TF-kortti) sisäinen tallennustila, ero ulkoisen tallennuksen.



Ensinnäkin sisäinen tallennustila Androidissa, ulkoinen tallennustila



Sisäistä tallennustilaa
Käsite: Huomaa, että sisäinen muisti ei ole muistia. Sisäinen tallennustila sijaitsee erityisessä paikassa järjestelmässä. Jos haluat tallentaa tiedostoja sisäiseen tallennustilaan, tiedostoja voi käyttää oletuksena vain sovelluksellasi, ja kaikki sovelluksen luomat tiedostot ovat samat kuin sovelluspaketin nimi. Sisällön alla. Tämä tarkoittaa, että sovellus luo tiedoston, joka tallennetaan sisäisesti ja liittyy sovellukseen. Kun sovellus poistetaan, myös nämä sisäisessä muistissa olevat tiedostot poistetaan. Teknisesti ottaen, jos asetat tiedoston ominaisuuden luettavaksi sisäistä tallennustiedostoa luodessasi, muut sovellukset voivat käyttää sovelluksensa tietoja edellyttäen, että hän tietää sovelluksesi paketin nimen, jos tiedoston ominaisuudet ovat yksityisiä (yksityisiä ), niin vaikka tiedät paketin nimen, muita sovelluksia ei voida käyttää. Sisäinen tallennustila on hyvin rajallinen, joten se on arvokasta. Lisäksi se on myös järjestelmän itse ja järjestelmäsovellusten tärkein tietojen tallennuspaikka. Kun sisäinen tallennustila on käytetty, matkapuhelinta ei voida käyttää. Joten sisäisen tallennustilan osalta meidän on yritettävä välttää sen käyttöä. Sekä Jaetut asetukset että SQLite-tietokannat tallennetaan sisäiseen muistiin. Sisäinen tallennustila saadaan yleensä ja sitä käsitellään kontekstin avulla.
Sisäisen tallennuksen API-menetelmät:
1, Environment.getDataDirectory ()
2, getFilesDir (). GetAbsolutePath ()
3, getCacheDir (). GetAbsolutePath ()
4 、 getDir (“myFile”, MODE_PRIVATE) .getAbsolutePath ()
Ulkoinen tallennustila
Käsite: Hämmentävintä on ulkoinen tallennustila, koska vanha Android-järjestelmä eroaa uudesta Android-järjestelmästä. Monet ihmiset siirtyvät verkkoon etsimään tietoja ja tarkastelemaan aiempia tietoja. Katsoin ajankohtaisia ​​tietoja, mutta huomasin, että ne olivat erilaisia ​​ja sekaisin sitten. Ensinnäkin puhutaan yhteisestä käsitteestä. 'Jos erotat ulkoisen tallennustilan tietokoneessa olevasta sisäisestä tallennustilasta, tietokoneen mukana toimitettu kiintolevy on sisäinen tallennustila ja USB-muistitikku tai kannettava kiintolevy on ulkoista tallennustilaa.' Niin monet ihmiset tuovat tämän ymmärryksen. Katsokaa Android-puhelinta, sisäänrakennettua tallennustilaa (kehon tallennustilaa) sisäisenä tallennustilana ja laajennettua SD-korttia ulkoisena tallennustilana. Tämä on totta, koska se pätee matkapuhelimiin ennen versiota 4.4 (API19). Muistikortti, jota puhelin itse kantaa, on sisäinen tallennustila, ja laajennettu SD-kortti on ulkoinen tallennustila. 4.4-järjestelmästä alkaen monet keski- ja huippuluokan koneet ovat kuitenkin laajentaneet omaa kehonsa varastointia yli 8G: ksi. Esimerkiksi joidenkin ihmisten matkapuhelimet ovat 16G ja joidenkin matkapuhelimet ovat 32G, mutta tämä 16G, 32G on sisäinen. Säilytä sitä, ei! ! ! Ne ovat edelleen ulkoista tallennustilaa, mikä tarkoittaa, että 4.4-järjestelmä ja sitä korkeampi matkapuhelintallennustila (itse matkapuhelimen tallennustilaa kutsutaan kehon tallennustilaksi) on käsitteellisesti jaettu sisäiseen sisäiseen tallennustilaan ja ulkoiseen ulkoiseen muistiin. . Koska 16G ja 32G ovat ulkoista tallennustilaa, joillakin ihmisillä on epäilyksiä. Jos 4.4-järjestelmä tai uudempi on kytketty SD-korttiin, mikä on SD-kortti? Jos SD-kortti on tallennettu myös ulkoisesti, miten rungon varastointi erotetaan? Ulkoinen ja SD-kortin ulkoinen tallennus? Kyllä, SD-kortti on myös ulkoinen tallennustila, joten miten se erotetaan, järjestelmässä 4.4 jälkeen API tarjoaa tällaisen menetelmän puhelimen ulkoisen tallennuspolun kulkemiseen:



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

Jos matkapuhelimesi on kytketty SD-korttiin, tulostamiseen on kaksi polkua. Esimerkiksi Huawei Glory 7 -laitteessani on SD-kortti. Tulos on seuraava:
/ storage / emulated / 0 / Android / data / packname / files / mounted
/ storage / B3E4-1711 / Android / data / packname / files / asennettu
jossa hakemisto / storage / emulated / 0 on kehon tallennustilan ulkoinen tallennuspolku
ja / storage / B3E4-1711 / on SD-kortin polku
Niitä kutsutaan yhdessä ulkoiseksi tallennustilaksi
API-menetelmä ulkoisen tallennustilan käyttämiseen:
1, Environment.getExternalStorageDirectory (). GetAbsolutePath ()
2 、 Environment.getExternalStoragePublicDirectory (“”). GetAbsolutePath ()
3 、 getExternalFilesDir (“”). GetAbsolutePath ()
4, getExternalCacheDir (). GetAbsolutePath ()
Kaikilla on epäilyksiä Androidin ulkoisesta tallennustilasta. Tärkein syy on, että monet matkapuhelimet eivät ole nähneet ulkoista tallennustilaa fyysisesti. Aikaisemmissa matkapuhelimissa on samanlainen musta muistikortti, 8G, 16G, 32G, joka voi olla kuin U-levy on kytketty ja irrotettu. Se oli aiemmin erittäin suosittu. Jos tallennustila ei riitä, ostan muistikortin (tarkalleen ottaen se on SD-kortti, jonka sanotaan olevan väärinkäsitys muistikortista). Myöhemmin esimerkiksi matkapuhelin, nyt käytän Huawei glory 7 -tuotetta. Valmistaja on laajentanut rungon tallennustilaa 16G: ksi, mutta tallennuskonsepti on jaettu sisäiseen tallennustilaan (sisäinen sisäinen) ja ulkoiseen muistiin (ulkoinen ulkoinen), itse asiassa he ovat integroituja. Tietysti, jos luulet, että 16G ei riitä, tukeeko hän kapasiteetin laajentamista asettamalla SD-kortin? Tuettu, kunnia 7 esimerkkinä, se on kolme kahdessa korttipaikka. Korttipaikka 1: Nano-SIM-korttipaikka 2: Nano-SIM-kortti tai Micro SD-kortti. Oletuskorttipaikka 1 on 4G-pääkortti. Voit muuttaa 4G-pääkorttipaikkaa asetuksissa. Se ei tue pikavaihtoa. Sinun on käynnistettävä puhelin uudelleen kortin kytkemisen ja irrottamisen jälkeen. Näin asetettu SD-kortti tallennetaan myös ulkoisesti. Joten puhelimen ulkoinen tallennustila voi sisältää kaksi osaa, toinen on rungon ulkoisen muistin osa ja toinen SD-kortin osa.

Toiseksi ero getDataDirectory-, getFilesDir-, getCacheDir-, getDir-, getExternalStorageDirectory-, getExternalStoragePublicDirectory-, getExternalFilesDir-, getExternalCacheDir-, getExternalCacheDir-, getRootDirectory-Android-versioiden välillä

Näitä menetelmiä olemme ehkä tavanneet aiemmin, mutta joillekin opiskelijoille on vaikea erottaa, lähinnä Androidin eri versioiden ongelma. Kaikkien ymmärryksen helpottamiseksi esitän lyhyesti yllä olevat menetelmät. Kaikkien mukavuuden vuoksi tulostan näiden menetelmien tulokset (seuraavat tulostulokset perustuvat Glory 7: een (järjestelmäversio 6.0):
1, Environment.getDataDirectory () = / data
Tämä menetelmä on saada sisäisen muistin juuripolku
2, getFilesDir (). GetAbsolutePath () = / data / user / 0 / packname / files
Tämä menetelmä on saada sovelluksen tiedostopolku sisäiseen muistiin.
3, getCacheDir (). GetAbsolutePath () = / data / user / 0 / packname / cache
Tämä menetelmä on saada sovelluksen välimuisti polku sisäiseen muistiin.
4 、 getDir (“myFile”, MODE_PRIVATE) .getAbsolutePath () = / data / user / 0 / packname / app_myFile
Tämä menetelmä on saada sovelluksen mukautettu polku sisäiseen muistiin
Menetelmien 2, 3 ja 4 poluilla on kaikilla pakettien nimet, jotka osoittavat, että ne kuuluvat sovellukseen.
…………………………………………………………………………………………
5, Environment.getExternalStorageDirectory (). GetAbsolutePath () = / varastointi / emuloitu / 0
Tämä menetelmä on saada ulkoisen muistin juuripolku
6 、 Environment.getExternalStoragePublicDirectory (“”). GetAbsolutePath () = / storage / emulated / 0
Tämä menetelmä on saada ulkoisen muistin juuripolku
7 、 getExternalFilesDir (“”). GetAbsolutePath () = / tallennus / emuloitu / 0 / Android / data / paketin nimi / tiedostot
Tämä menetelmä on saada sovelluksen tiedostopolku ulkoiseen muistiin.
8, getExternalCacheDir (). GetAbsolutePath () = / storage / emulated / 0 / Android / data / packname / cache
Tämä menetelmä on saada sovelluksen välimuisti polku ulkoiseen muistiin.
Huomautus: Menetelmät 7 ja 8 palauttavat arvon null, jos getExternalFilesDir ('') ja getExternalCacheDir () ovat järjestelmässä ennen versiota 4.4. Jos järjestelmä on 4.4 tai uudempi, yllä oleva tulos palautetaan, toisin sanoen järjestelmää ennen 4.4 ei ole asetettu SD-kortille. Jos ulkoista tallennustilaa ei ole, sen SD-kortti on yhtä suuri kuin ulkoinen tallennustila ja 4.4 ja uudemmat järjestelmän ulkoiset tallennustilat koostuvat kahdesta osasta, getExternalFilesDir ('') ja getExternalCacheDir () saavat kehon tallennustilan ulkoisen tallennustilan osan, eli 4.4 ja uudemmat. järjestelmissä, et aseta SD-korttia, sillä on myös ulkoinen tallennustila, koska getExternalFilesDir ('') ja getExternalCacheDir () saavat kehon tallennustilan ulkoisen osan, kuinka saada SD-kortin tallennuspolku tai edellä mainittu menetelmä getExternalFilesDirs (Environment.MEDIA_MOUNTED) saadaan. En tiedä tarjoaako Android asiaankuuluvan API-käyttöliittymän SD-kortin tallennuspolun saamiseksi. Voit tarkistaa tiedot. Toisti yllä olevat sanat, lähinnä muistuttamaan kaikkia kiinnittämään huomiota eroon eri Android-versioiden välillä, tämä on kaikkein kuoppa.
…………………………………………………………………………………………
Environment.getDownloadCacheDirectory () = / välimuisti
Environment.getRootDirectory () = / järjestelmä
Näillä kahdella menetelmällä ei ole mitään sanottavaa, kukin Android-järjestelmän versio on sama
…………………………………………………………………………………………
Edellä esitetystä voimme selvästi nähdä, että yllä olevat menetelmät voidaan jakaa kolmeen luokkaan, erotin ne vaakasuorilla viivoilla. Ensimmäinen luokka sijaitsee juurihakemistossa / tiedoissa on myös luokka juurihakemistossa / tallennustilassa, voit nähdä, että API-menetelmällä, joka kutsuu heitä, on ulkoinen, toinen luokka ei ole kohdassa / data, / Storage, For esimerkiksi järjestelmätiedosto / järjestelmä tai välimuistitiedosto / välimuisti.
/ Data-hakemiston tiedostot tallennetaan fyysisesti siihen, mitä yleensä kutsumme sisäiseksi tallennustilaksi.
/ Storage-hakemistossa olevat tiedostot tallennetaan fyysisesti siihen, mitä yleensä kutsumme ulkoiseksi tallennustilaksi.
/ system käytetään järjestelmätiedostojen tallentamiseen, / cache käytetään joidenkin välimuistitiedostojen tallentamiseen, fyysisesti ne tallennetaan myös sisäiseen muistiin.
Tarkastellaan kaikkien yleisiä kysymyksiä.
Kysymys 1, mitä eroa on getFilesDir (). GetAbsolutePath () ja getCacheDir (). GetAbsolutePath () välillä?
Eroa ei ole, voimme tarkastella seuraavaa kuvaa:
kuva
getFilesDir saa tiedostohakemiston, getCacheDir saa välimuistihakemiston, ne ovat samassa hakemistossa, vain erityyppisten tietojen tallentamiseksi, tiedostonimeä ei ole vaikea nähdä: välimuisti Tallenna välimuistitiedot, tallenna SQLite-sovellukseen tallennetut tiedot tietokantaan, tallenna normaalit tiedot (lokitiedot, Json-tyyppiset tiedot jne.) tiedostoihin ja SharedPreference-palvelun tallentamat tiedot shared_prefs-kansioon. Järjestelmä luo nämä kansiot.
Kysymys 2, mikä on ero getFilesDir (). GetAbsolutePath (): n ja getExternalFilesDir (''). GetAbsolutePath (): n välillä?
Katsotaanpa ensin heidän polkuaan:
/ data / user / 0 / packname / files
/ storage / emulated / 0 / Android / data / packname / files
On selvää, että näiden kahden välinen ero on yksi sisäisessä ja yksi ulkoisessa tallennustilassa, mikä on ero niiden välillä. Heillä on yhteistä se, että heidän polkuihinsa liittyy paketin nimi, mikä osoittaa, että se on APP: n oma tiedosto. Tällaiset tiedostot tulisi poistaa yhdessä sovelluksen asennuksen poistamisen kanssa, ja poistamme sovelluksen tiedot asetuksista. Molempien kansioiden tiedot tyhjennetään.
Kysymys 3, mikä on sovelluskohtainen asiakirja?
Edellä mainitussa kysymyksessä 2 mainitsimme yksinoikeustiedoston, niin kutsuttu yksinoikeustiedosto on, että se kuuluu tiettyyn sovellukseen, ja hänen tiedostopolullaan on vastaava paketin nimi, kun APP poistetaan, ne poistetaan sovelluksen kanssa ja Kun tyhjennämme sovellustiedot manuaalisesti asetuksissa (ei tyhjennä välimuistia), ne tyhjennetään myös yhdessä. Tämän Android-tiedoston käyttämisen tarkoituksena on helpottaa tiedostojen hallintaa ja välttää tiedostojen satunnaista tallentamista, mikä on sotkuista. Toinen tarkoitus on jättää paljon roskapostitiedostoja, kun sovellus poistetaan.
Kysymys 4. Koska sekä sisäisessä että ulkoisessa tallennustilassa on sovelluskohtaisia ​​tiedostoja, mitä meidän tulisi käyttää?
Sekä sisäisessä että ulkoisessa tallennustilassa on sovelluskohtaisia ​​tiedostoja. Kumpi meidän pitäisi käyttää? On selvää, että ulkoista tallennustilaa tulisi käyttää, koska sisäinen tallennustila itsessään on suhteellisen pieni ja joitain järjestelmiä on tallennettu. Tiedostot, joten sisäistä tallennustilaa yritämme olla käyttämättä. Mutta kun puhelimessa ei ole ulkoista tallennustilaa, meidän on silti käytettävä sisäistä tallennustilaa. Yleensä ohjelmoija arvioi, onko ulkoista tallennustilaa vai ei sisäistä tallennustilaa. Koodi on seuraava:



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 }

Laadin seuraavan kuvaustaulukon, jotta kaikki ymmärtäisivät paremmin Android-järjestelmän eri versioiden tallennuserot:
vertaa eroa ennen ja kirjoittamisen jälkeen 19,48 miljoonaa tietoa getFilesDir (). getAbsolutePath () -polkuun ja getExternalFilesDir (''). getAbsolutePath () -polkuun.
Taulukko 1, 4.1.1-järjestelmä SD-kortilla (oikea kone)

varastointisijainti Menetelmä polun saamiseksi Kapasiteetti (ennen kirjoittamista) Kapasiteetti (kirjoittamisen jälkeen) Huomautukset
/ data / data / packname / files getFilesDir () 1,59 Gt 1,57 Gt Sisäistä tallennustilaa
/storage/sdcard0 getExternal
Tallennushakemisto ()
1,47 Gt 1,45 Gt Ulkoinen tallennustila (SD-kortti)

Taulukko 2, 4.1.1-järjestelmä, ilman SD-korttia (oikea kone)

varastointisijainti Menetelmä polun saamiseksi Kapasiteetti (ennen kirjoittamista) Kapasiteetti (kirjoittamisen jälkeen) Huomautukset
/ data / data / packname / files getFilesDir () 1,59 Gt 1,47 Gt Sisäistä tallennustilaa
Polkua ei ole olemassa getExternal
Tallennushakemisto ()
~~~ ~~~ SD-korttia ei ole asetettu

Taulukko 3, 4.2.1-järjestelmä SD-kortilla (simulaattori)

varastointisijainti Menetelmä polun saamiseksi Kapasiteetti (ennen kirjoittamista) Kapasiteetti (kirjoittamisen jälkeen) Huomautukset
/ data / data / packname / files getFilesDir () 1,85 Gt 1,83 Gt Sisäistä tallennustilaa
/ mnt / sdcard / getExternal
Tallennushakemisto ()
98,42 Mt. 78,93 Mt. Ulkoinen tallennustila (SD-kortti)

Taulukko 4, 4.4.2-järjestelmä SD-kortilla (oikea kone)

varastointisijainti Menetelmä polun saamiseksi Kapasiteetti (ennen kirjoittamista) Kapasiteetti (kirjoittamisen jälkeen) Huomautukset
/ data / data / packname / files getFilesDir () 2,22 Gt 2,18 Gt Sisäistä tallennustilaa
/storage/sdcard1 getExternal
Tallennushakemisto ()
2,20 Gt 2,16 Gt Ulkoinen tallennustila
/ storage / emulated / 0 / Android
/ data / packname / files
getExternalFilesDirs 1,47 Gt 1,47 Gt Ulkoinen tallennustila (SD-kortti)
ei kirjoittanut siihen tietoja, vain lukenut)

Taulukko 5, 4.4.2-järjestelmä, ilman SD-korttia (oikea kone)

varastointisijainti Menetelmä polun saamiseksi Kapasiteetti (ennen kirjoittamista) Kapasiteetti (kirjoittamisen jälkeen) Huomautukset
/ data / data / packname / files getFilesDir () 2,22 Gt 2,18 Gt Sisäistä tallennustilaa
/ varastointi / emuloitu / 0 getExternal
Tallennushakemisto ()
2,20 Gt 2,16 Gt Ulkoinen tallennustila

Taulukko 6, 6.0.0-järjestelmä SD-kortilla (oikea kone)

varastointisijainti Menetelmä polun saamiseksi Kapasiteetti (ennen kirjoittamista) Kapasiteetti (kirjoittamisen jälkeen) Huomautukset
/ data / user / 0 / packname / files getFilesDir () 11,94 Gt 11,90 Gt Sisäistä tallennustilaa
/ varastointi / B3E4-1711 getExternal
Tallennushakemisto ()
11,92 Gt 11,88 Gt Ulkoinen tallennustila
/ storage / emulated / 0 / Android
/ data / packname / files
getExternalFilesDirs 1,47 Gt 1,47 Gt Ulkoinen tallennustila (SD-kortti)
ei kirjoittanut siihen tietoja, vain lukenut

Taulukko VII, 6.0.0-järjestelmä, ilman SD-korttia (oikea kone)

varastointisijainti Menetelmä polun saamiseksi Kapasiteetti (ennen kirjoittamista) / varastointi / kapasiteetti (kirjoittamisen jälkeen) Huomautukset
/ data / user / 0 / packname / files getFilesDir () 11,93 Gt 11,89 Gt Sisäistä tallennustilaa
/ varastointi / emuloitu / 0 getExternal
Tallennushakemisto ()
11,91 Gt 11,87 Gt Ulkoinen tallennustila

Huomaa: Yllä oleva kapasiteetti viittaa polun juuripolun käytettävissä olevaan kapasiteettiin. Esimerkiksi / data / data / packname / files -kapasiteetti viittaa käytettävissä olevaan / data -kapasiteettiin, / storage / sdcard0 / Android / data / packname / files viittaa / storage / sdcard0 -kapasiteettiin ja yleensä järjestelmissä, joissa on 4.4 ja yli, käytämme SD: tä harvoin

Kolmanneksi tyhjennä tiedot ja tyhjennä lopuksi välimuisti

Tämä on helppo sekoittaa, miksi? Edellä mainitun kautta tiedämme:
/ data / user / 0 / packname / files Sitä käytetään normaalien tietojen tallentamiseen.
/ data / user / 0 / packname / cache Sitä käytetään välimuistitietojen tallentamiseen.
Niin monet ihmiset ajattelevat, että kun tyhjennän tiedot, ne ovat ehdottomasti tiedostojen alla olevia tietoja. Kun tyhjennän välimuistitiedot, se on ehdottomasti välimuistin alla olevaa tietoa, mutta näin ei ole. Oikean pitäisi olla:
Tyhjennä välimuisti : Tiedämme, että sovelluksen täytyy käydä läpi useita prosesseja käynnissä olevan prosessin aikana, kuten lukeminen ohjelmissa, laskelmat, syöttö ja lähtö jne. Nämä prosessit tuottavat varmasti paljon tietoa, ne ovat muistissa ja niitä kutsutaan, kun ohjelma on käynnissä. Siksi välimuistin tyhjentäminen tyhjentää väliaikaiset tiedot, jotka on luotu APP: n käynnissä.
Puhdas data : Tietojen tyhjentäminen on tiedostoon tallennettujen tietojen todellinen poisto (pysyvät tiedot, jos niitä ei poisteta manuaalisesti, tallennetaan tiedostoon). Esimerkiksi, kun tyhjennämme sovelluksen tiedot asetuksista, / data Data / user / 0 / packname / ja / storage / emulated / 0 / Android / data / packname / poistetaan, mukaan lukien välimuisti, tiedostot , lib, shared_prefs ja niin edelleen.

Neljänneksi, suhde / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0

Yllä olevasta taulukosta voimme nähdä, että 4.1-järjestelmässä getExternalStorageDirectory-menetelmällä saatu polku on / storage / sdcard0 polku, joka on saatu getExternalStorageDirectory-menetelmällä 4.2-järjestelmässä on / mnt / sdcard, koska 4.2 on seurausta simulaattoritulostus. Jos se on todellinen kone, se on myös / storage / sdcard0 polku, joka saadaan 4.4: n getExternalStorageDirectory-menetelmällä on / storage / emulated / 0, sen SD-kortin tallennuspolku on / storage / sdcard1 polku, jonka getExternalStorageDirectory-menetelmä on 6.0 on / storage / emulated / 0, sen SD-kortin tallennuspolku on / storage / B3E4-1711 lisäksi polku, joka on saatu testaamalla getExternalStorageDirectory-menetelmä 4.0: lla, on / mnt / sdcard. Joten todellisessa koneessa getExternalStorageDirectoryn saama polku näkyy seuraavassa taulukossa:

järjestelmäversio tulos
4.0 / mnt / sdcard
4.1 / storage / sdcard0
4.2 / storage / sdcard0
4.4 / varastointi / emuloitu / 0
6.0 / varastointi / emuloitu / 0

Jotta ymmärtäisimme / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0 välisen suhteen, meidän on ensin ymmärrettävä Linux-tiedostojen asennuksen käsite, voit siirtyä Baiduun mountilla. Ja emme ymmärrä, miksi on niin paljon hakemistoja, kuten / storage / sdcard, / sdcard, / mnt / sdcard, / storage / emulated / 0, mikä saa ihmiset näyttämään häikäiseviltä. Jos haluat lisätietoja, lue seuraava artikkeli huolellisesti alla. Artikkeli on minulle. Yksityiskohtainen kuvaus Android 4.2: n 0-kansiosta
- android 4.0 -
Galaxy Nexus (GN) -puhelimen käyttäjädataosio on erittäin suuri ja se on ripustettu / data-hakemistoon. Käyttäjän tiedot sijoitetaan yleensä SD-kortille, mutta gn: llä ei ole SD-korttia, joten Google ajatteli tapaa olla virtuaalinen.
Joten userdata-osiossa on hakemisto nimeltä media, joka on sisäänrakennetun SD-kortin tietojen tallennuspaikka. Käytä sulaketekniikkaa virtualisoimaan / data / media laitteeksi nimeltä / dev / fuse. Jotta ohjelma tunnistaisi sen, se asennetaan samanaikaisesti hakemistoon / mnt / sdcard, ja jotta se olisi yhteensopiva edellisen ohjelman kanssa, tehdään pikakuvake (nimeltään pehmeä yhteys Linux-järjestelmässä) / sdcard-pisteet tiedostoon / mnt / sdcard.
Tietenkin nämä ovat kaikki 4,0 -käytäntöjä.
- android 4.1 -
Kohdassa 4.1 käytetään myös sulaketekniikkaa. / dev / fuse asennetaan hakemistoon / storage / sdcard0 samaan aikaan. Tämä sdcard0 osoittaa ensimmäisen SD-kortin (jos on ulkoinen Sd-kortti, tulee olemaan vielä yksi / storage / sdcard1, kuten minun xoom), / sdcard-pehmeä yhteys osoittaa kohtaan / storage / sdcard0, sitten / mnt / sdcard on myös pehmeä yhteys, osoittaa / storage / sdcard0.
Jos yhdistät U-levyn otg-linjan kautta, se asennetaan hakemistoon / storage / usb0. Stickmount-ohjelmisto voi nähdä u-levyn kirjastolle, pikakartalle, mx-soittimelle ja muille ohjelmistoille. Sen sisältämät tiedot on myös asennettu hakemistoon / storage / sdcard0 / usStorage / sda1.
Ehkä kysyt, miksi ei usb0, mutta sda1, tämä on linux-tapa nimetä kiintolevy, jos u-levylläsi on useita osioita, se on sda1, sda2 Se on tyhjennetty.
- android 4.2 -
Ok, aloitetaan 4.2-järjestelmästä.
Google ei ole kunnossa, sinun on annettava Androidille monikäyttäjä, ajattelet sitä, Kiinassa, ehkä taloudellisten ongelmien takia, perhe ei ole tietokone per henkilö, Yhdysvalloissa melkein ihmiset, jotka tarvitsevat tietokonetta sinulla on yksi tai useampi niistä, ja hyvin harvoissa tapauksissa monet ihmiset käyttävät yhtä tietokonetta. Siksi sitä kutsutaan tietokoneeksi, kuten nimestä voi päätellä, henkilökohtaiseksi tietokoneeksi. Matkapuhelimet ja tabletit ovat henkilökohtaisempia ja niitä jaetaan harvoin, mielestäni niin Kiinassa.
Tietenkään Google ei ole täysin houkuteltava, koska hänellä on suurempi strateginen käyttöönotto, ja tabletilla on mahdollisuus usealle henkilölle.
Joten Google on luonut usean käyttäjän, ja kaikkien sovellukset, tiedot ja persoonallisuusasetukset on erotettava toisistaan. Sovelluksen ja persoonallisuuden kokoonpano voidaan tehdä, ajattele sitä, kulunvalvonnan avulla jokainen henkilö voi nähdä vain omat sovelluksensa, työpöytä voi käyttää myös omia.
Entä data? ? ? ?
Ok, säädä käyttäjätietojen asennusrakenne. Android 4.2, käyttää myös sulaketekniikkaa / dev / fuse asennetaan hakemistoon / storage / emulated / 0, miksi on 0, muistat edelleen yllä olevan sdcard0: n, ensimmäisen merkityksen. (Jos on toinen, sen pitäisi olla / storage / emulated / 1, kolmella poikallamme ei ole ulkoista SD-korttia, joten tarkistusta ei ole mahdollista)
Yhdistä edelliseen liittämällä / storage / emulated / legacy (nimetty uudelleen, perinteinen), luo myös kolme pehmeää yhteyttä / storage / sdcard0, / sdcard, / mnt / Sdcard, molemmat osoittavat / storage / emulated / legacy
Monet opiskelijat eivät ehkä tarkastele vakavasti edellä mainittuja asioita, tässä esitän lyhyesti yhteenvedon:
1, jossa sdcard /, mnt / sdcard, storage / sdcard0, storage / emulated / 0, storage / emulated / legacy ovat kaikki saman polun eri 'osoittimia', jotka osoittavat samaan yhteen paikkaan, vain eri Android-versioita kutsutaan eri tavalla .
2. Jos haluat tietää kunkin version ulkoisen tallennuspolun, opiskelijat voivat verrata getExternalStorageDirectory-menetelmän tulostuloksia.

Viisi, kuva, jolla ymmärretään Ram-, Rom- ja laajennetun tallennustilan (TF-kortti) sisäisen tallennustilan välinen ero, ero ulkoisen tallennustilan välillä.

kuva
1. Selvitetään ensin muutama käsite, muisti, sisäinen tallennustila, ulkoinen tallennustila ja kehon tallennus (sisäänrakennettu tallennustila).
1.1 muisti, jota kutsumme englanniksi muistiksi, muisti on yksi tietokoneen tärkeistä osista, se on silta kommunikoida suorittimen kanssa. Kaikki tietokoneen ohjelmat ajetaan muistissa, joten sitä käytetään tietokoneen suorittamiseen, sitä ei käytetä tietojen tallentamiseen.
1.2 sisäinen tallennus, ulkoinen tallennus sisäinen tallennustila, jota kutsumme InternalStorage, ulkoisesti kutsumme ExternalStorage, nämä kaksi käsitettä ovat peräisin varhaisesta Android-älykoneesta, ennen 4.4, sisäänrakennettu tallennustila on sisäinen tallennus Ulkoinen SD-kortti on ulkoinen tallennustila. Voimme saada sisäisen muistin juuripolun getDataDirectoryn kautta ja saada ulkoisen SD-kortin juuripolun getExternalStorageDirectoryn kautta. 4.4: n jälkeen ulkoinen tallennustila koostuu kahdesta osasta, joista kehon varaston ulkoinen tallennustila saadaan getExternalStorageDirectoryn kautta, ja ulkoinen SD-kortti on hankittava getExternalDirs-läpikulun kautta.
1.3 rungon varastointi rungon varastointi viittaa puhelimen itse kantamaan, jo tehtaalta toimitettuun varastotilaan, 4.4 ennen rungon varastointia on sisäinen varastointi, 4.4 ja uudemmat rungon varastot sisältävät sisäisen ja ulkoisen tallennustilan.
2, Ram, Rom ja laajennetun tallennustilan (TF-kortti) käsite. Kuten kuvasta näet, matkapuhelimessa on muisti, sisäänrakennettu muisti ja SD-kortti. Ne ovat Ram-, Rom- ja TF-kortteja. Näiden kolmen kortin suorituskyky, materiaali ja hinta ovat erilaiset. Hyödyllinen.
3, sisäinen varastointi, ulkoisen tallennuksen käsite. Monet ihmiset ymmärtävät tämän väärin ajattelemalla, että kehon tallennustila on muistia ja SD-korttia kutsutaan ulkoiseksi tallennustilaksi, mikä on itse asiassa väärin, eri Android-versiot ovat erilaisia, katso ensimmäinen artikkeli.
Lopuksi esimerkkini on liitteenä:
http://download.csdn.net/download/u010937230/9930396