2013-03-02 24 views
7

lý do tại sao, tài nguyên được chuyển đổi thành HEXAdecimal, nó có tạo ra một số truy cập nhanh vào tài nguyên của bạn cho ứng dụng hay không.lý do tại sao, tài nguyên trong android được chuyển đổi thành HEXA-DECIMAL bên trong R.java

+0

Chúng không được chuyển đổi thành bất kỳ thứ gì. Bạn chỉ tình cờ xem chúng dưới dạng thập lục phân. Nó có thể bằng nhau là bát phân hoặc thực sự nhị phân, đó là những gì họ thực sự đang có. – Simon

Trả lời

6

R.java không có gì khác ngoài tệp lớp có hằng số tĩnh cho từng tài nguyên trong dự án của bạn. Hằng số là số chỉ mục vào hệ thống tệp hiệu quả. Vì vậy, myicon.png được cấp một số tệp 12345. Trình quản lý tài nguyên sử dụng chỉ mục này để tải tài nguyên vào lúc chạy. Mở nó ra. Hãy xem.

Hãy xem xét một ví dụ R.java:

public final class R { 
    public static final class id { 
     public static final int myTextView=0x7f090008; 
    } 
} 

tôi có thể tham khảo myTextview sử dụng:

findViewById(R.id.myTextView) - constant 
findViewById(0x7f090008) - hex 
findViewById(2131296264) - decimal 
findViewById(017702200010) - octal 
findViewById(0b1111111000010010000000000001000) - binary 

Họ đều là tương đương.

Tương tự, tôi có thể mã hóa tập tin R.java của tôi như thế này:

public final class R { 
    public static final class id { 
     public static final int myTextView=0b1111111000010010000000000001000; 
    } 
} 

Nó vẫn hoạt động.

Không có gì là "được chuyển đổi", bạn chỉ sử dụng hằng số để tham chiếu số chỉ mục. Trình biên dịch sẽ chăm sóc nó. Bạn chỉ tình cờ xem nó dưới dạng thập lục phân nhưng cuối cùng, như mọi thứ trong ứng dụng của bạn, nó chỉ là những cái và số không.

Lý do duy nhất để thực hiện việc này là để bạn có thể sử dụng các hằng số. Hãy tưởng tượng duy trì mã của bạn nếu bạn phải sử dụng các giá trị chỉ mục thực tế, đặc biệt là khi chúng có thể và sẽ thay đổi mỗi khi bạn xây dựng lại R.java.

Số chỉ mục không phải là địa chỉ bộ nhớ hoặc bù trừ hoặc loại phô mai đặc biệt. Chúng đơn giản là hằng số, được tạo ra bởi trình biên dịch, để cho phép bạn truy cập các tài nguyên bằng cách sử dụng các tên thân thiện với con người.

2

Tệp R.java được tạo bởi Trình quản lý tài nguyên Android Trình đóng gói quản lý tài sản Android (aapt.exe) và chứa tham chiếu đến tất cả các tài nguyên của ứng dụng của bạn. Mỗi tham chiếu là một id duy nhất (public static final int). Các hằng số này được ghi vào tệp R.java theo định dạng thập lục phân.

+0

hmm ... đây là cái gì lạ .exe bạn đề cập đến? – ElefantPhace

+0

@ElefantPhace Không có gì lạ về nó. Đó là trình đóng gói quản lý tài sản Android. – Simon

+0

Hey Danny. Tôi vô tình downvoted bạn (buồn ngủ sai). Vui lòng chỉnh sửa câu trả lời của bạn (thậm chí thêm không gian sẽ làm) để tôi có thể sửa lỗi của mình. – Simon

-1

Đó là loại kiến ​​trúc từ góc độ của Android. khi bạn phát triển ứng dụng android và chỉ xây dựng mã (không cài đặt trong thiết bị/trình mô phỏng) vào thời điểm đó, DVM phân bổ bộ nhớ cho các tài nguyên mà chúng tôi đã thiết kế. do đó địa chỉ bộ nhớ thực đã được phân bổ cho chúng và theo kích thước của tài nguyên, địa chỉ tiếp theo sẽ được phân bổ. vì vậy khi bạn đặt logic trong mã để truy cập vào cùng nó sẽ trực tiếp refere đến vị trí đó và cố gắng để có được các nguồn lực mà làm cho nó nhanh hơn. không cần phân tích cú pháp và các nội dung khác.

Hy vọng điều này sẽ trả lời câu hỏi của bạn

+0

nhưng, bạn có nghĩ về điều này .... một bit addressic_action_search = 0x7f020000; ic_launcher = 0x7f020001; Một địa chỉ bit đơn là đủ để tạo sự khác biệt. – user2125918

+2

Tôi không thể chờ đợi để nghe lời giải thích của bạn về cách trình biên dịch trên máy tính của tôi sử dụng DVM trên điện thoại của tôi để xây dựng các "địa chỉ bộ nhớ" này. Nó cũng có vẻ hoạt động khi tôi không cắm điện thoại vào! Kinh ngạc! – Simon

+0

@ user2125918: Nó chỉ là địa chỉ mà nó lưu trữ các phần khác của bộ nhớ được đưa ra từ đống. bạn chỉ cần chụp ảnh nếu mọi thứ được phân bổ trên thời gian biên dịch thì kích thước ứng dụng sẽ có kích thước rất lớn –

Các vấn đề liên quan