Android의 원시 리소스 대신 자산을 언제 사용해야합니까? 스트림을 제공합니다. 자산은 원시 자원보다 훨씬

나는 안드로이드 연구의 한가운데에 있으며 자산과 원시 자원을 방금 다루었습니다. Raw resources vs. Assets를 사용하는 이유를 이해하려고합니다.

  1. 둘 다 컴파일되지 않은 리소스 입력 스트림을 제공합니다.

  2. 자산은 원시 자원보다 훨씬 더 많은 유연성과 기능을 제공하는 것으로 보입니다.

    ㅏ. 아래에서 폴더 구조를 만들 수 assets있지만 아래에서 만들 수는 없습니다.raw

    비. assets폴더에있는 것이 아니라 폴더 에 모든 리소스를 동적으로 나열 할 수 있습니다 raw.

그렇다면 왜 Android에서 Raw 리소스를 사용해야합니까?



답변

사이의 주요 차이점 raw폴더와 assets폴더.

  • raw는 리소스 (res)의 하위 폴더이므로 Android는 ID그 안에있는 모든 파일을 자동으로 생성 합니다. 이것은
    ID다음에 저장되어있는 R class이 쉽게 다른 안드로이드 클래스와 메소드에서, 심지어 안드로이드 XML 파일에 액세스 할 수 있습니다 의미하는 파일에 대한 참조 역할을 것이다. 자동 생성 된 ID를 사용하는 것이 Android에서 파일에 액세스하는 가장 빠른 방법입니다.

  • assets폴더가있다 “부록” 디렉토리. R 클래스 ID를 생성하지 않습니다 일부 안드로이드 클래스와 메소드 덜 호환이 배치 파일에 있습니다. String을 기반으로assets 폴더에 대한 핸들을 가져와야 하므로 폴더의 파일 액세스 속도가 느려집니다 . 그러나 데이터베이스 파일을 시스템 메모리에 복사하는 것과 같이이 폴더에 파일을 저장하면 일부 작업이 더 쉽게 수행됩니다. Assets 폴더 안의 파일에 대한 Android XML 참조를 만드는 쉬운 방법은 없습니다.


답변

로부터 안드로이드 문서raw/디렉토리가 사용됩니다 :

원시 파일로 저장할 임의의 파일. 원시 InputStream으로 이러한 자원을 열려면 자원 ID ( R.raw.filename )Resources.openRawResource () 를 호출 하십시오 .

그러나 원래 파일 이름과 파일 계층에 액세스해야하는 경우 res / raw / 대신assets/ 디렉토리에 일부 자원을 저장하는 것을 고려할 수 있습니다 . asset /의 파일 에는 자원 ID가 제공되지 않으므로 AssetManager를 통해서만 읽을 수 있습니다 .


한 라인에서의 파일 raw/디렉토리가되는 플랫폼에서 컴파일되지 , 리소스 ID를 할당 하고 하위 폴더로 그룹화 할 수 없습니다 당신이 원하는 경우 그렇지 않으면 사용하는 반면, assets/디렉토리.


답변

위에 주어진 답변에 추가하는 중 …

/ res / strings, / res / layout, / res / xml 파일 등은 모두 이진 형식으로 컴파일됩니다. 그러나 XML 파일을 포함한 파일을 / res / raw / 디렉토리에 배치하면 이진 형식으로 컴파일되지 않습니다.

원시 자원보다 자산을 사용하는 것의 큰 장점 중 하나는
file:///android_asset/ Uri 접두사입니다. 이는 자산을 WebView에로드하는 데 유용합니다. 예를 들어 프로젝트 내 asset / foo / index.html에있는 자산에 액세스하기 위해 loadUrl("file:///android_asset/foo/index.html")해당 HTML을 WebView에로드하는 것을 호출 할 수 있습니다
.


답변