Quando devo utilizzare le risorse anziché le risorse non elaborate in Android?


152

Sono a metà dei miei studi su Android e ho appena coperto le risorse e le risorse grezze. Sto cercando di capire il motivo dell'utilizzo delle risorse non elaborate rispetto alle risorse.

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

  2. Sembra che le risorse offrano molta più flessibilità e funzionalità rispetto alle risorse Raw.

    un. È possibile creare strutture di cartelle sotto assetsma non sottoraw

    b. Puoi elencare tutte le risorse in modo dinamico nella assetscartella ma non nella rawcartella.

Quindi, perché dovrei usare le risorse Raw in Android?


Risposte:


183

Le principali differenze tra la rawcartella e la assetscartella.

  • Poiché raw è una sottocartella di risorse (res), Android genererà automaticamente un IDfile per ogni file contenuto al suo interno. Questo IDviene quindi archiviato nel R classche fungerà da riferimento a un file, il che significa che può essere facilmente accessibile da altre classi e metodi Android e persino nei file XML Android. L'uso dell'ID generato automaticamente è il modo più veloce per accedere a un file in Android.

  • La assetscartella è una directory "appendice" . La classe R non genera ID per i file inseriti, il che è meno compatibile con alcune classi e metodi Android. L'accesso ai file nella assetscartella è più lento poiché sarà necessario gestirlo in base a una stringa . Tuttavia, alcune operazioni vengono eseguite più facilmente posizionando i file in questa cartella, come copiare un file di database nella memoria del sistema. Non esiste un modo (semplice) per creare un riferimento XML Android ai file all'interno della cartella Risorse.


4
@ user370305 Ciao, la limitazione da 1 MB è ancora lì per il nuovo sistema operativo Android? Non riesco a trovare alcuna documentazione che ne parli. Hai idea di dove posso trovarlo?
GMsoF,

6
@GMsoF - Non esiste alcun documento specifico per questo. Ma ho alcuni link utili per te. 1. blog.rossgreenhalf.com/2010/12/13/android-file-size-limits 2. stackoverflow.com/questions/11276112/... 3. stackoverflow.com/questions/6809651/... 4. elinux.org/Android_aapt e 5. android-developers.blogspot.in/2012/03/… Basta passare come da sr n.
user370305,

2
@GMsoF - Ci sono molti trucchi per mettere la dimensione del file più grande di 1 mb nella /assetdirectory.
user370305,

10
non ho mai avuto una limitazione delle dimensioni del file per la cartella delle risorse. sei sicuro che ci sia una cosa del genere?
sviluppatore Android

2
Sì, prima di Android 2.2 o 2.3, qualsiasi file di risorsa compresso con una dimensione non compressa di oltre 1 MB non può essere letto dall'APK. Che è menzionato qui groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
user370305

34

Dalla documentazione di Android , la raw/directory viene utilizzata per:

File arbitrari da salvare nella loro forma grezza. Per aprire queste risorse con un InputStream non elaborato , chiamare Resources.openRawResource () con l'ID risorsa, ovvero R.raw.filename .

Tuttavia, se hai bisogno di accedere ai nomi di file e alla gerarchia di file originali, potresti considerare di salvare alcune risorse nella assets/directory (anziché res / raw /) . Ai file nelle risorse / non viene assegnato un ID risorsa, quindi puoi leggerli solo usando AssetManager .


In una riga, i file nella raw/directory non vengono compilati dalla piattaforma , gli viene assegnato un ID risorsa e non possono essere raggruppati in sottocartelle, se si desidera altrimenti utilizzare la assets/directory.


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

@ 40-Love Non ci sono restrizioni sulla dimensione del file per Android 2.3 e versioni successive, a meno che tu non supporti versioni precedenti. È possibile scegliere qualsiasi cartella di archiviazione in base alle proprie esigenze. Una grande distinzione è il modo in cui questi file sono accessibili.
Principe

1

Aggiunta alle risposte fornite sopra ...

I file / res / stringhe, / res / layout, / res / xml ecc. vengono compilati in formato binario. Ma se si posizionano i file, inclusi i file XML, nella directory / res / raw /, non vengono compilati in formato binario.

Un grande vantaggio dell'utilizzo delle risorse rispetto alle risorse non elaborate è il prefisso file:///android_asset/ Uri, utile per caricare una risorsa in un WebView. Ad esempio, per accedere a una risorsa che si trova in assets / foo / index.html all'interno del progetto, è possibile chiamare il loadUrl("file:///android_asset/foo/index.html")caricamento di tale HTML nel WebView.


È possibile utilizzare il file:///android_res/prefisso per puntare a una risorsa non elaborata.
androidguy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.