Câu trả lời:
Cơ chế này được mô tả tại trang web dành cho nhà phát triển Android như sau:
zipalign là một công cụ căn chỉnh lưu trữ cung cấp tối ưu hóa quan trọng cho các tệp ứng dụng Android (.apk). Mục đích là để đảm bảo rằng tất cả dữ liệu không nén bắt đầu bằng một căn chỉnh cụ thể liên quan đến phần bắt đầu của tệp. Cụ thể, nó làm cho tất cả dữ liệu không nén trong .apk, chẳng hạn như hình ảnh hoặc tệp thô, được căn chỉnh trên ranh giới 4 byte. Điều này cho phép tất cả các phần được truy cập trực tiếp bằng mmap () ngay cả khi chúng chứa dữ liệu nhị phân với các hạn chế căn chỉnh. Lợi ích là giảm lượng RAM tiêu thụ khi chạy ứng dụng.
Tóm lại: .apk
nội dung có thể dễ dàng hơn / nhanh hơn / truy cập tối ưu hơn do thứ tự dữ liệu bên trong tệp được đóng gói.
Để biết thêm thông tin, có "hướng dẫn đầy đủ" có sẵn tại AddictiveTips: Zipalign trong Android là gì và Cách tạo ứng dụng được Zipalign , trả lời phần thứ hai của câu hỏi của bạn:
Khá dễ hiểu, tình huống sẽ được dành riêng cho các gói ứng dụng chưa được phân bổ. Việc đọc tài nguyên sẽ chậm và việc sử dụng bộ nhớ sẽ ở mức cao hơn của phổ. Nó cũng sẽ phụ thuộc vào số lượng ứng dụng chưa được phân bổ có mặt. Ví dụ: nếu số lượng ứng dụng ít hơn với một ứng dụng gia đình không được phân bổ, bạn sẽ thấy thời gian khởi chạy ứng dụng chậm hơn. Đây là trường hợp tốt nhất. Đối với trường hợp xấu nhất, việc có một số ứng dụng không được sắp xếp sẽ dẫn đến hệ thống liên tục bắt đầu và tiêu diệt các quá trình, vật lộn với độ trễ và hao pin lớn.
Để thêm vào ở trên cách chính xác zipalign hoạt động -
Trong môi trường vận hành Android, các tệp dữ liệu được lưu trữ trong mỗi gói ứng dụng được truy cập bởi nhiều quy trình, ví dụ: trình cài đặt sẽ đọc tệp kê khai dữ liệu để xác định các quyền liên quan; máy chủ hệ thống có thể đọc các tài nguyên này vì nhiều lý do, như hiển thị thông báo; chẳng hạn, ứng dụng Home sẽ đọc tài nguyên để lấy tên và biểu tượng của ứng dụng. Vì Android dựa trên cơ sở hạ tầng hoạt động đa tác vụ thực sự, các tệp này được truy cập liên tục và liên tục. Cuối cùng, nhưng không kém phần quan trọng, ứng dụng tự đọc dữ liệu tệp kê khai.
Vì Android dựa trên Linux, ánh xạ bộ nhớ đóng vai trò chính trong việc xử lý hiệu quả các quy trình. Về cơ bản, căn chỉnh tối ưu cho mã xử lý tài nguyên của HĐH Android là các ranh giới 4 byte. Điều này có nghĩa là, nếu APK được ánh xạ bộ nhớ đến ranh giới 4 byte và được căn chỉnh phù hợp, HĐH sẽ không cần phải 'đọc qua' toàn bộ gói ứng dụng để có được bảng kê khai dữ liệu mong muốn. Mọi quy trình hệ thống sẽ biết trước nơi tìm kiếm tài nguyên mong muốn của nó và do đó sẽ thực hiện mượt mà hơn và nhanh hơn.
Tóm tắt, sắp xếp lại một kết quả APK trong tất cả dữ liệu không nén trong gói được căn chỉnh trên ranh giới 4 byte, cho phép tất cả các phần được truy cập trực tiếp với bản đồ bộ nhớ. Tiêu thụ RAM được hạ xuống trong khi thực thi vì mã truy vấn không phải đọc qua toàn bộ gói ứng dụng.
struct x { uint16_t id; uint32_t data[100]; };
nếu bạn muốn nó được căn chỉnh 32 bit; sử dụngstruct x { uint16_t id; uint16_t padding; uint32_t data[100]; };