Android Runtime và Dalvik

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

ART và Dalvik là các môi trường 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 với ART. Tuy nhiên, một số 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).

Các tính năng của 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 khi thực thi (AOT)

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

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

Cải thiện tính năng thu gom rác

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

  • Thiết kế chủ yếu đồ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ớ ở chế độ nền và tình trạng phân mảnh
  • Thời lượng tạm dừng GC không phụ thuộc vào kích thước vùng nhớ khối xếp
  • Trình thu thập có tổng thời gian GC thấp hơn đối với trường hợp đặc biệt là dọn dẹp các đối tượng có thời gian tồn tại ngắn, được phân bổ gần đây
  • Cải thiện khả năng thu gom rác, giúp các hoạt động thu gom rác đồng thời diễn ra kịp thời hơn, nhờ đó các sự kiện GC_FOR_ALLOC 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 việc phát triển và gỡ lỗi ứng dụng.

Hỗ trợ trình phân tích tài nguyên lấy mẫu

Trước đây, các nhà phát triển đã sử dụng công cụ Traceview (được thiết kế để theo dõi quá trình thực thi ứng dụng) 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, nhưng kết quả của công cụ này trên Dalvik đã bị sai lệch do hao tổn trên mỗi lệnh gọi phương thức và việc sử dụng công cụ này ả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 tài nguyên lấy mẫu chuyên dụng không có các giới hạn này. Điều này giúp bạn có được thông tin chính xác hơn về quá trình thực thi ứng dụng mà không làm chậm đáng kể. Tính năng hỗ trợ lấy mẫu được thêm vào Traceview cho Dalvik trong bản phát hành KitKat.

Hỗ trợ thêm nhiều tính năng gỡ lỗi

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

  • Xem khoá nào được giữ trong dấu vết ngăn xếp, sau đó chuyển đến luồng giữ khoá.
  • Hỏi số lượng thực thể đang hoạt động của một lớp nhất định, yêu cầu xem các thực thể đó và xem những tệp tham chiếu nào đang giữ cho đối tượng hoạt động.
  • Lọc sự kiện (chẳng hạ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 sự kiện "method-exit").
  • Đặt điểm theo dõi trường để tạm ngưng việc thực thi chương trình khi một trường cụ thể được truy cập và/hoặc sửa đổi.

Cải thiện thông tin chẩn đoán trong các báo cáo ngoại lệ và sự cố

ART cung cấp cho bạn nhiều thông tin chi tiết và ngữ cảnh nhất có thể khi xảy ra ngoại lệ thời gian chạy. ART cung cấp thông tin chi tiết về ngoại lệ mở rộng cho java.lang.ClassCastException, java.lang.ClassNotFoundExceptionjava.lang.NullPointerException. (Các phiên bản Dalvik sau này đã cung cấp thông tin chi tiết về 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à độ lệch ngoài giới hạn, và ART cũng thực hiện việc này.)

Ví dụ: java.lang.NullPointerException hiện hiển thị thông tin về việc ứng dụng đang cố gắng làm gì với con trỏ rỗng, chẳng hạn như trường mà ứng dụng đang cố gắng ghi vào hoặc phương thức mà ứng dụng đang cố gắng gọi. 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 đưa cả thông tin ngăn xếp Java và gốc vào.

Báo cáo sự cố

Nếu bạn gặp bất kỳ vấn đề nào không phải do vấn đề JNI của ứng dụng, hãy báo cáo các vấn đề đó thông qua Công cụ theo dõi lỗi của Dự án nguồn mở Android. Thêm adb bugreport và đường liên kết đến ứng dụng trong Cửa hàng Google Play (nếu có). Nếu không, nếu có thể, hãy đính kèm một tệp APK tái hiện vấn đề.