2012-03-05 16 views
110

questa è una sorta di domanda filosofica .... Sono nel bel mezzo dei miei studi nel mondo Android e ho appena coperto le risorse di risorse e raw.Il motivo per Risorse e Risorse RAW in Android

Sto cercando di capire il motivo dell'utilizzo delle risorse raw rispetto alle risorse.

  1. Entrambi forniscono un flusso di input di risorse non compilato.

  2. Sembra che le risorse forniscano molta più flessibilità e funzionalità rispetto alle risorse RAW.

    a. È possibile creare una struttura di cartelle in Risorse e non in Raw

    b. è possibile elencare tutte le risorse in modo dinamico nella cartella delle risorse e non nella cartella Raw.

Quindi perché dovrei utilizzare le risorse Raw in Android?

Grazie.

+0

Possibile duplicato di [Differenza tra/res e/directory delle risorse] (http://stackoverflow.com/questions/5583608/difference-between-res-and-assets-directories) – rds

risposta

143

Le principali differenze tra la cartella raw e la cartella Assets.

  • Dal grezzo è una sottocartella di risorse (res), Android sarà genererà automaticamente un ID per qualsiasi file che si trova al suo interno. Questo ID viene quindi memorizzato uno R class che fungerà da riferimento a un file, il che significa che può essere facilmente accessibile da altre classi Android e metodi e anche nei file XML Android. L'utilizzo dell'ID generato automaticamente è il modo più rapido per accedere a un file in Android.

  • La cartella delle risorse è una directory "appendice" "appendice". La classe R non genera ID per i file inseriti, quindi è meno compatibile con lo con alcune classi e metodi Android. Inoltre, è molto più lento a accedere a un file al suo interno, poiché è necessario ottenere un handle per esso basato su una stringa. Tuttavia alcune operazioni vengono eseguite più facilmente da collocando i file in questa cartella, come la copia di un file di database nella memoria del sistema . Non c'è (facile) modo di creare un riferimento XML Android ai file all'interno della cartella Risorse.

+0

E ancora potrei usare la cartella Asset . Capisco che sarà "più difficile" accedervi da Android Classes e non sarà possibile fare riferimento ad esso da Android XML ma, comunque, è confuso, quali sono i casi d'uso per ciascun tema? – Mortalus

+0

Caso di utilizzo, Supponiamo di dover utilizzare il file di database precaricato con la tua app quindi/asset è meglio, e devi usare il file xml precaricato che puoi analizzare nella tua applicazione tramite codice quindi usando/raw puoi accedervi direttamente. – user370305

+0

quindi alla linea di fondo, quali file vengono inseriti in raw e quali vengono inseriti nelle risorse? – josephus

17

Dal Android documentation, la directory raw/ è utilizzato per:

file arbitrari per salvare nella loro forma grezza. Per aprire queste risorse con una cruda InputStream, chiamare Resources.openRawResource() con l'ID risorsa, che è R.raw.filename.

Tuttavia, se è necessario accedere a nomi di file originale e gerarchia di file, si potrebbe considerare di salvare alcune risorse nel assets/ directory (invece di res/raw /). I file nelle risorse / non hanno un ID risorsa, quindi è possibile leggerli solo utilizzando AssetManager.


In una riga, i file nella directory raw/ sono not compiled by the platform, vengono assegnati un ID di risorsa e non possono essere raggruppati in sotto-cartelle mentre se si desidera che il altrimenti utilizzare la directory assets/.

+1

I file raw sono l'opzione migliore se si desidera copiare un file di grandi dimensioni nella cartella di archiviazione? –

+0

@ 40-Love Non c'è alcuna limitazione alle dimensioni del file per Android 2.3 e versioni successive [a meno che non supporti versioni precedenti.] (Http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression -in-android-apps /) È possibile scegliere qualsiasi cartella di archiviazione in base alle proprie esigenze. Una distinzione importante è il modo in cui questi file sono accessibili. – Prince