Thời gian chạy Android (ART) là thời gian chạy được quản lý được sử dụng bởi các ứng dụng và một số dịch vụ hệ thống trên Android. ART và người tiền nhiệm Dalvik ban đầu được tạo riêng cho dự án Android. ART khi thời gian chạy thực thi định dạng Dalvik Executable và đặc tả bytecode Dex.
ART và Dalvik là các thời gian chạy tương thích chạy Dex bytecode, 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 Xác minh hành vi ứng dụng trên thời gian chạy Android (ART) .
Tính năng ART
Dưới đây là một số tính năng chính do ART thực hiện.
Biên dịch trước thời gian (AOT)
ART giới thiệu tính năng biên dịch trước thời hạn (AOT), có thể cải thiện hiệu suất ứng dụng. ART cũng có 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ông cụ dex2oat trên thiết bị. Tiện ích này chấp nhận các tệp DEX làm đầu vào và tạo một ứng dụng đã biên dịch có thể thực thi cho thiết bị đích. Tiện ích sẽ 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ý hậu kỳ tạo ra các tệp không hợp lệ có thể được Dalvik dung thứ nhưng ART không thể biên dịch được. Để biết thêm thông tin, hãy xem Giải quyết vấn đề thu gom rác .
Cải thiện 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 hiển thị không ổn định, khả năng phản hồi giao diện người dùng kém và các vấn đề khác. ART cải thiện việc thu gom rác theo một số cách:
- Chủ yếu là thiết kế đồng thời với một khoảng dừng GC duy nhất
- Sao chép đồng thời để giảm sử dụng bộ nhớ nền và phân mảnh
- Độ dài của thời gian tạm dừng GC không phụ thuộc vào kích thước heap
- Bộ sưu tập với tổng thời gian GC thấp hơn cho trường hợp đặc biệt là dọn dẹp các vật thể tồn tại trong thời gian ngắn, được phân bổ gần đây
- Cải tiến công thái học thu gom rác, giúp việc thu gom rác đồng thời kịp thời hơn, điều này làm cho các sự kiện
GC_FOR_ALLOC
trở nên cực kỳ hiếm trong các trường hợp sử dụng điển hình
Cải tiến 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ợ cho bộ hồ sơ 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) như một trình biên dịch. Trong khi Traceview cung cấp thông tin hữu ích, kết quả của nó trên Dalvik đã bị sai lệch bởi chi phí cuộc gọi cho mỗ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 hỗ trợ cho trình biên dịch lấy mẫu chuyên dụng không có những hạn chế này. Điều này mang lại cái nhìn chính xác hơn về việc thực thi ứng dụng mà không bị chậm lại đáng kể. 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 các tính năng gỡ lỗi
ART hỗ trợ một số tùy chọn gỡ lỗi mới, đặc biệt trong chức năng liên quan đến giám sát và thu gom rác. Ví dụ, bạn có thể:
- Xem những ổ khóa nào được giữ trong dấu vết ngăn xếp, sau đó chuyển đến luồng giữ ổ khóa.
- Hỏi có bao nhiêu phiên bản trực tiếp của một lớp nhất định, yêu cầu xem các phiên bản và xem những tham chiếu nào đang giữ cho một đối tượng hoạt động.
- Lọc các sự kiện (như breakpoint) cho một trường hợp cụ thể.
- Xem giá trị được trả về bởi một phương thức khi nó thoát (sử dụng các sự kiện “method-exit”).
- Đặt điểm theo dõi trường để tạm dừ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 chi tiết chẩn đoán trong các trường hợp ngoại lệ và báo cáo sự cố
ART cung cấp cho bạn nhiều ngữ cảnh và chi tiết nhất có thể khi các trường hợp ngoại lệ thời gian chạy xảy ra. ART cung cấp chi tiết ngoại lệ mở rộng cho java.lang.ClassCastException
, java.lang.ClassNotFoundException
và java.lang.NullPointerException
. (Các phiên bản sau của Dalvik đã cung cấp chi tiết ngoại lệ mở rộng cho java.lang.ArrayIndexOutOfBoundsException
và java.lang.ArrayStoreException
, hiện bao gồm kích thước của mảng và bù đắp ngoài giới hạn và ART cũng thực hiện điều này.)
Ví dụ: java.lang.NullPointerException
hiện hiển thị thông tin về những gì ứng dụng đang cố gắng thực hiện với con trỏ null, 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. Dưới đây là một số ví dụ điển hình:
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 gốc và Java.
Báo cáo sự cố
Nếu bạn gặp phải bất kỳ sự cố nào không phải do sự cố JNI của ứng dụng, hãy báo cáo chúng thông qua Trình theo dõi sự cố dự án nguồn mở Android . Bao gồm báo cáo adb bugreport
và liên kết đến ứng dụng trong cửa hàng Google Play nếu có. Nếu có thể, hãy đính kèm APK tái tạo sự cố.