Thời gian chạy Android và Dalvik

Thời gian chạy Android (ART) là thời gian chạy được quản lý được các ứng dụng và một số dịch vụ hệ thống trên Android sử dụng. 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 thực thi Dalvik (DEX) và đặc tả 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 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 NGHỆ THUẬT

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

Biên soạn trước thời gian (AOT)

ART giới thiệu tính năng tổng hợp trước thời hạn (AOT), có thể cải thiện hiệu suất ứng dụng. 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ô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 ra một ứng dụng đã biên dịch có thể thực thi được cho thiết bị đích. 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ý hậu kỳ tạo ra các tệp không hợp lệ có thể được Dalvik chấp nhận nhưng ART không thể biên dịch. Để biết thêm thông tin, hãy xem Giải quyết các vấn đề về thu gom rác .

Cải thiện việc thu gom rác

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

  • Hầu hết 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 và phân mảnh bộ nhớ nền
  • Độ dài tạm dừng GC không phụ thuộc vào kích thước heap
  • Collector có tổng thời gian GC thấp hơn dành cho 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 công thái học của việc thu gom rác, giúp việc thu gom rác đồng thời kịp thời hơn, khiến 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 thông thường

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ợ lấy mẫu hồ sơ

Trong lịch sử, 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 hồ sơ. Mặc dù Traceview cung cấp thông tin hữu ích nhưng kết quả của nó trên Dalvik đã bị sai lệch do chi phí cho mỗi cuộc 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 hỗ trợ cho trình hồ sơ 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ợ nhiều tính năng gỡ lỗi hơn

ART hỗ trợ một số tùy chọn gỡ lỗi mới, đặc biệt là về 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 chuỗi chứa 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 tài liệu tham khảo nào đang giữ cho một đối tượng tồn tại.
  • Lọc các sự kiện (như điểm dừng) cho một phiên bản 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 "thoát phương thức").
  • Đặ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.

Chi tiết chẩn đoán được cải thiệ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 xảy ra trường hợp ngoại lệ trong thời gian chạy. ART cung cấp chi tiết ngoại lệ mở rộng cho java.lang.ClassCastException , java.lang.ClassNotFoundExceptionjava.lang.NullPointerException . (Các phiên bản sau này của Dalvik đã 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à phần bù 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à nó đ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 các báo cáo sự cố gốc của ứng dụng, bằng cách bao gồm cả thông tin về Java và ngăn xếp gốc.

Báo cáo vấn đề

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 adb bugreport và liên kết tới ứ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 APK tái tạo sự cố.