Thời gian chạy Android và Dalvik

Android Runtime (ART) là môi trường thời gian chạy được quản lý được các ứng dụng và một số hệ thống sử dụng trên Android. ART và Dalvik trước đó ban đầu được tạo dành riêng cho dự án Android. ART khi thời gian chạy thực thi Dalvik định dạng có thể thực thi (DEX) và thông số mã byte DEX.

ART và Dalvik là các thời gian chạy tương thích chạy mã byte DEX, vì vậy, các ứng dụng được phát triển cho Dalvik sẽ hoạt động khi chạy bằng ART. Tuy nhiên, một số các kỹ thuật hoạt động trên Dalvik không hoạt động trên ART. Để biết thông tin về các vấn đề quan trọng nhất, hãy xem phần Xác minh hành vi của ứng dụng trên Android Runtime (ART).

Tính năng ART

Dưới đây là một số tính năng chính do ART triển khai.

Biên dịch trước đây (AOT)

ART giới thiệu tính năng biên dịch trước khi chạy (AOT), có thể cải thiện ứng dụng hiệu suất. ART cũng có quy trình xác minh thời gian cài đặt chặt chẽ hơn Dalvik.

Tại thời điểm cài đặt, ART biên dịch ứng dụng bằng cách sử dụng dữ liệu trên thiết bị dex2oat. Tiện ích này chấp nhận các tệp DEX làm dữ liệu đầu vào và tạo tệp thực thi của ứng dụng được biên dịch cho thiết bị mục tiêu. Tiện ích này sẽ có thể biên dịch tất cả các tệp DEX hợp lệ một cách dễ dàng. Tuy nhiên, một số bước xử lý các công cụ tạo ra các tệp không hợp lệ có thể được dung lượng bởi Dalvik nhưng không thể được do ART tổng hợp. Để biết thêm thông tin, hãy xem phần Cách xác định địa chỉ Vấn đề về việc thu gom rác.

Cải thiện tính năng thu thập rác

Việc thu gom rác (GC) tiêu tốn rất nhiều tài nguyên, có thể làm giảm hiệu suất của ứng dụng, dẫn đến tình trạng màn hình bị giật, khả năng phản hồi của giao diện người dùng kém và các vấn đề khác. ART cải thiện rác thải thu thập theo một số cách:

  • Chủ yếu là thiết kế đồng thời với một lần tạm dừng GC
  • Sao chép đồng thời để giảm mức sử dụng bộ nhớ trong nền và sự phân mảnh
  • Thời gian tạm dừng GC không phụ thuộc vào kích thước vùng nhớ khối xếp
  • Bộ thu gom có tổng thời gian thu gom rác thấp hơn cho trường hợp dọn dẹp đặc biệt các vật thể tồn tại ngắn, mới phân bổ gần đây
  • Cải thiện tính tiện dụng cho việc thu gom rác, khiến rác đồng thời các bộ sưu tập được cập nhật kịp thời hơn, giúp GC_FOR_ALLOC các sự kiện cực kỳ hiếm gặp trong các trường hợp sử dụng thông thường

Cải tiến về phát triển và gỡ lỗi

ART cung cấp một số tính năng để cải thiện hoạt động phát triển và gỡ lỗi ứng dụng.

Hỗ trợ trình phân tích mẫu

Trước đây, các nhà phát triển thường sử dụng Traceview công cụ (được thiết kế để theo dõi ứng dụng thực thi) làm trình phân tích tài nguyên. Mặc dù Traceview cung cấp thông tin hữu ích, kết quả trên Dalvik bị sai lệch do chi phí cho mỗi lệnh gọi phương thức và việc sử dụng của công cụ ảnh hưởng đáng kể đến hiệu suất thời gian chạy.

ART bổ sung tính năng hỗ trợ cho trình phân tích mẫu chuyên dụng không có hạn chế. Điều này mang đến cái nhìn chính xác hơn về quá trình thực thi ứng dụng mà không cần giảm tốc đáng kể. Thêm tính năng hỗ trợ lấy mẫu vào Traceview cho Dalvik trong bản phát hành KitKat.

Hỗ trợ nhiều tính năng gỡ lỗi khác

ART hỗ trợ một số tuỳ chọn gỡ lỗi mới, đặc biệt là trong tính năng giám sát và liên quan đến thu gom rác. Ví dụ như bạn có thể:

  • Xem khoá nào được lưu giữ trong dấu vết ngăn xếp, sau đó chuyển đến luồng đang giữ khoá.
  • Hỏi có bao nhiêu thực thể trực tiếp trong một lớp nhất định, yêu cầu xem thực thể nào khác và xem tệp tham chiếu nào đang giúp đối tượng hoạt động.
  • Lọc các sự kiện (như điểm ngắt) cho một thực thể cụ thể.
  • Xem giá trị mà một phương thức trả về khi thoát (sử dụng “method-exit” sự kiện).
  • Đặt điểm theo dõi trường để tạm ngưng thực thi chương trình khi một được truy cập và/hoặc sửa đổi.

Cải thiện chi tiết chẩn đoán trong ngoại lệ và báo cáo sự cố

ART cung cấp cho bạn nhiều ngữ cảnh và thông tin nhất có thể khi có ngoại lệ đối với thời gian chạy xảy ra. ART cung cấp thông tin chi tiết mở rộng về ngoại lệ cho java.lang.ClassCastException, java.lang.ClassNotFoundException, và java.lang.NullPointerException. (Các phiên bản Dalvik sau này cung cấp chi tiết ngoại lệ mở rộng cho java.lang.ArrayIndexOutOfBoundsExceptionjava.lang.ArrayStoreException, hiện bao gồm kích thước của mảng và giá trị bù nằm ngoài giới hạn, cũng như ART cũng sẽ thực hiện điều này.)

Ví dụ: java.lang.NullPointerException hiện cho thấy thông tin về thao tác mà ứng dụng đang cố gắng thực hiện với con trỏ rỗng, chẳng hạn như trường mà ứng dụng đang cố ghi vào hoặc phương thức mà ứng dụng đang cố gắng ghi . Sau đây là một số ví dụ tiêu biểu:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

ART cũng cung cấp thông tin ngữ cảnh được cải thiện trong báo cáo sự cố gốc của ứng dụng, bằng cách bao gồm cả thông tin ngăn xếp Java và ngăn xếp gốc.

Báo cáo sự cố

Nếu bạn gặp những vấn đề không liên quan đến vấn đề về JNI của ứng dụng, hãy báo cáo chúng thông qua Nguồn mở Android Công cụ theo dõi lỗi dự án. Thêm adb bugreport và liên kết tới ứng dụng trong cửa hàng Google Play nếu có. Ngược lại, nếu có thể, hãy đính kèm Tệp APK tái tạo sự cố.