Hướng dẫn

Hướng dẫn tăng cấp cho hành trình cải thiện hiệu suất

9 phút đọc
Alice Yuan
Kỹ sư quan hệ với nhà phát triển

Hướng dẫn tăng cấp cho hành trình cải thiện hiệu suất

Chào mừng bạn đến với ngày thứ 4 của Tuần giới thiệu hiệu suất. Giờ đây, bạn đã tìm hiểu về một số công cụ tuyệt vời và các phương pháp hay nhất mà chúng tôi đã giới thiệu gần đây, chẳng hạn như Trình tối ưu hoá R8 và tính năng Tối ưu hoá theo hướng dẫn của hồ sơ bằng Hồ sơ cơ sởHồ sơ khởi động. Có thể bạn đang thắc mắc nên bắt đầu hành trình cải thiện hiệu suất từ đâu.

Chúng tôi đã đưa ra hướng dẫn tăng cấp hiệu suất từng bước để hỗ trợ nhóm phát triển ứng dụng di động của bạn, bất kể bạn là một nhà phát triển đang tìm cách bắt đầu cải thiện hiệu suất hay bạn có một nhóm chuyên cải thiện hiệu suất trên Android. 

Hướng dẫn tăng cấp hiệu suất có 5 cấp. Chúng ta sẽ bắt đầu với cấp 1, giới thiệu công cụ hiệu suất với nỗ lực áp dụng tối thiểu, rồi lên đến cấp 5, lý tưởng cho các ứng dụng có nguồn lực để duy trì một khung hiệu suất riêng.


Bạn có thể chuyển đến cấp phù hợp nhất với mình:

Cấp 1:  Sử dụng tính năng giám sát thực tế do Play Console cung cấp

Trước tiên, bạn nên tận dụng Android vitals trong Play Console để xem dữ liệu giám sát thực tế được thu thập tự động, giúp bạn nắm được thông tin chi tiết về ứng dụng của mình với nỗ lực tối thiểu.

Android vitals là sáng kiến của Google nhằm tự động thu thập và hiển thị dữ liệu thực tế này cho bạn.

Sau đây là giải thích về cách chúng tôi cung cấp dữ liệu này:

  1. Thu thập dữ liệu: Khi người dùng chọn tham gia, thiết bị Android của họ sẽ tự động ghi nhật ký các sự kiện chính về hiệu suất và tính ổn định từ tất cả ứng dụng, bao gồm cả ứng dụng của bạn.
  2. Tổng hợp dữ liệu: Google Play thu thập và ẩn danh dữ liệu này từ người dùng ứng dụng của bạn.
  3. Hiển thị thông tin chi tiết: Dữ liệu được trình bày cho bạn trong trang tổng quan Android vitals trong Google Play Console.

Trang tổng quan Android vitals theo dõi nhiều chỉ số, nhưng một số chỉ số được chỉ định là Các chỉ số quan trọng chính. Đây là những chỉ số quan trọng nhất vì chúng có thể ảnh hưởng đến khả năng hiển thị và thứ hạng của ứng dụng trên Cửa hàng Google Play.

Các chỉ số quan trọng chính

CÁC CHỈ SỐ KỸ THUẬT CHÍNH VỀ CHẤT LƯỢNG CỦA GOOGLE PLAY

Để tối đa hoá khả năng hiển thị trên Google Play, hãy đảm bảo ứng dụng của bạn nằm dưới ngưỡng hành vi xấu cho các chỉ số này.

Tỷ lệ sự cố mà người dùng nhận thấyTỷ lệ phần trăm số người dùng hoạt động hằng ngày gặp phải ít nhất một sự cố mà có thể họ đã nhận thấy
Tỷ lệ lỗi ANR mà người dùng nhận thấyTỷ lệ phần trăm số người dùng hoạt động hằng ngày gặp phải ít nhất một lỗi ANR mà có thể họ đã nhận thấy
Mức sử dụng pin quá caoTỷ lệ phần trăm số phiên sử dụng mặt đồng hồ với mức sử dụng pin vượt quá 4,44% mỗi giờ
Mới: Tỷ lệ khoá chế độ thức một phần quá mứcTỷ lệ phần trăm số phiên của người dùng mà mức sử dụng khoá chế độ thức tích luỹ, không được miễn trừ vượt quá 2 giờ

Các chỉ số quan trọng chính bao gồm tỷ lệ sự cố mà người dùng nhận thấy, Tỷ lệ ANR, mức sử dụng pin quá cao và chỉ số mới được giới thiệu về tỷ lệ khoá chế độ thức một phần quá mức.

Tỷ lệ lỗi ANR mà người dùng nhận thấy

Bạn có thể sử dụng trang tổng quan Android Vitals ANR để xem dấu vết ngăn xếp của các vấn đề xảy ra trong thực tế và nhận thông tin chi tiết cũng như đề xuất về cách khắc phục vấn đề. 

crashesAnrs.png

Bạn có thể xem chi tiết một ANR cụ thể đã xảy ra để xem dấu vết ngăn xếp cũng như thông tin chi tiết về nguyên nhân có thể gây ra vấn đề.

insights.png

Ngoài ra, hãy tham khảo hướng dẫn về lỗi ANR của chúng tôi để giúp bạn chẩn đoán và khắc phục các tình huống phổ biến mà lỗi ANR có thể xảy ra. 

Tỷ lệ sự cố mà người dùng nhận thấy

Sử dụng trang tổng quan sự cố Android vitals để gỡ lỗi thêm về sự cố và xem mẫu dấu vết ngăn xếp xảy ra trong ứng dụng của bạn. 

Tài liệu của chúng tôi cũng có hướng dẫn về cách khắc phục sự cố cụ thể. Ví dụ: hướng dẫn Khắc phục sự cố dịch vụ chạy trên nền trước thảo luận về các cách xác định và khắc phục các tình huống phổ biến mà sự cố xảy ra.

Mức sử dụng pin quá cao

Để giảm số phiên sử dụng mặt đồng hồ có mức sử dụng pin quá cao trên Wear OS, hãy tham khảo hướng dẫn về Wear để biết cách cải thiện và tiết kiệm pin

[mới] Tỷ lệ khoá chế độ thức một phần quá mức

 

Gần đây, chúng tôi đã thông báo rằng các ứng dụng vượt quá ngưỡng tỷ lệ khoá chế độ thức một phần quá mức có thể phải chịu thêm biện pháp xử lý bắt đầu từ ngày 1 tháng 3 năm 2026

Đối với thiết bị di động, chỉ số Android vitals áp dụng cho các khoá chế độ thức không được miễn trừ thu được khi màn hình tắt và ứng dụng đang chạy ở chế độ nền hoặc đang chạy một dịch vụ trên nền trước. Android vitals coi mức sử dụng khoá chế độ thức một phần là quá mức nếu khoá chế độ thức được giữ trong ít nhất 2 giờ trong khoảng thời gian 24 giờ và ảnh hưởng đến hơn 5% số phiên của ứng dụng, tính trung bình trong 28 ngày.

Để gỡ lỗi và khắc phục các vấn đề về khoá chế độ thức quá mức, hãy xem bài đăng trên blog kỹ thuật của chúng tôi.

Tham khảo tài liệu Android vitals của chúng tôi và tiếp tục hành trình tận dụng tốt hơn Android vitals.

Cấp 2: Làm theo các mục hành động của Điểm hiệu suất ứng dụng

Tiếp theo, hãy chuyển sang sử dụng Điểm hiệu suất ứng dụng để tìm các mục hành động có đòn bẩy cao nhằm nâng cao hiệu suất của ứng dụng.

Điểm hiệu suất ứng dụng Android là một khung tiêu chuẩn để đo lường hiệu suất kỹ thuật của ứng dụng. Điểm này nằm trong khoảng từ 0 đến 100, trong đó số càng thấp thì càng có nhiều cơ hội cải thiện.

Để đạt được những thành công dễ dàng, trước tiên, bạn nên bắt đầu với Điểm hiệu suất tĩnh. Đây thường là các thay đổi về cấu hình hoặc bản cập nhật công cụ giúp tăng hiệu suất đáng kể.

Bước 1: Thực hiện đánh giá tĩnh

Đánh giá tĩnh đánh giá cấu hình và việc áp dụng công cụ của dự án. Đây thường là những cách nhanh nhất để cải thiện hiệu suất.

Chuyển đến phần Điểm tĩnh của trang bảng điểm và thực hiện các thao tác sau:

  1. Đánh giá Phiên bản trình bổ trợ Android cho Gradle (AGP).
  2. Áp dụng tính năng Giảm thiểu R8 theo từng bước hoặc lý tưởng nhất là sử dụng R8 ở chế độ đầy đủ để giảm thiểu và tối ưu hoá mã ứng dụng.
  3. Áp dụng Hồ sơ cơ sở giúp cải thiện tốc độ thực thi mã từ lần khởi chạy đầu tiên, cung cấp các tính năng nâng cao hiệu suất cho mỗi lần cài đặt ứng dụng mới và mỗi bản cập nhật ứng dụng.
  4. Áp dụng Hồ sơ khởi động để cải thiện Bố cục Dex. Hệ thống xây dựng sử dụng Hồ sơ khởi động để tối ưu hoá thêm các lớp và phương thức mà chúng chứa bằng cách cải thiện bố cục mã trong các tệp DEX của APK.
  5. Nâng cấp lên phiên bản mới nhất của Jetpack Compose

Bước 2: Thực hiện đánh giá động

Sau khi áp dụng các thành công dễ dàng về tĩnh, hãy sử dụng đánh giá động để xác thực các cải tiến trên thiết bị thực. Trước tiên, bạn có thể thực hiện việc này theo cách thủ công bằng thiết bị thực và đồng hồ bấm giờ.

Chuyển đến phần Điểm động của trang bảng điểm và thực hiện các thao tác sau:

  1. Thiết lập môi trường thử nghiệm bằng thiết bị thực. Cân nhắc sử dụng thiết bị cấp thấp hơn để phóng đại các vấn đề về hiệu suất, giúp bạn dễ dàng phát hiện hơn.
  2. Đo lường thời gian khởi động từ trình chạy. Khởi động nguội ứng dụng của bạn từ biểu tượng trình chạy và đo lường thời gian cho đến khi ứng dụng có thể tương tác.
  3. Đo lường thời gian khởi động ứng dụng từ một thông báo, với mục tiêu giảm thời gian khởi động thông báo xuống dưới vài giây.
  4. Đo lường hiệu suất kết xuất bằng cách cuộn qua các màn hình và hình ảnh động chính.

Sau khi hoàn tất các bước này, bạn sẽ nhận được điểm số từ 1 đến 100 cho điểm tĩnh và điểm động, giúp bạn hiểu được hiệu quả của ứng dụng và nơi cần tập trung.

Cấp 3: Tận dụng các khung kiểm thử hiệu suất cục bộ

Sau khi bắt đầu đánh giá hiệu suất động, bạn có thể thấy việc đo lường hiệu suất theo cách thủ công quá tẻ nhạt. Cân nhắc tự động hoá việc kiểm thử hiệu suất bằng các khung kiểm thử hiệu suất như Macrobenchmark và UiAutomator.

Macrobenchmark 💚 UiAutomator

Hãy coi Macrobenchmark và UiAutomator là hai công cụ hoạt động cùng nhau: Macrobenchmark là công cụ đo lường. Công cụ này giống như đồng hồ bấm giờ và bộ đếm tốc độ khung hình chạy bên ngoài ứng dụng của bạn. Công cụ này chịu trách nhiệm khởi động ứng dụng, ghi lại các chỉ số (như thời gian khởi động hoặc khung hình bị rớt) và dừng ứng dụng. UiAutomator là người dùng robot. Thư viện này cho phép bạn viết mã để tương tác với màn hình của thiết bị. Công cụ này có thể tìm thấy một biểu tượng, nhấn vào một nút,  cuộn trên danh sách và nhiều thao tác khác.

Cách viết bài kiểm thử

Khi viết bài kiểm thử, bạn sẽ gói mã UiAutomator bên trong một khối Macrobenchmark.

  1. Xác định bài kiểm thử: Sử dụng @MacrobenchmarkRule
  2. Bắt đầu đo lường: Gọi benchmarkRule.measureRepeated.
  3. Điều khiển giao diện người dùng: Bên trong khối đó, hãy sử dụng mã UiAutomator để khởi chạy ứng dụng, tìm các phần tử trên giao diện người dùng và tương tác với chúng.

Sau đây là một đoạn mã ví dụ về cách kiểm thử danh sách kết hợp để tìm lỗi giật khi cuộn.

  benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

4. Xem xét kết quả: Mỗi lần chạy kiểm thử cung cấp cho bạn thông tin được đo lường chính xác để cung cấp cho bạn dữ liệu tốt nhất về hiệu suất của ứng dụng.

  timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

Các trường hợp sử dụng phổ biến

Macrobenchmark cung cấp một số chỉ số quan trọng chính ngay từ đầu. StartupTimingMetric cho phép bạn đo lường chính xác quá trình khởi động ứng dụng. FrameTimingMetric cho phép bạn hiểu được hiệu suất kết xuất của ứng dụng trong quá trình kiểm thử.

Chúng tôi có hướng dẫn chi tiết và đầy đủ về cách sử dụng Macrobenchmark và UiAutomator cùng với các mẫu mã có sẵn để bạn tiếp tục tìm hiểu.

Cấp 4: Sử dụng các công cụ phân tích dấu vết như Perfetto 

Các công cụ phân tích dấu vết như Perfetto được sử dụng khi bạn cần xem ngoài mã xử lý ứng dụng của riêng mình. Không giống như các trình gỡ lỗi hoặc trình phân tích tài nguyên tiêu chuẩn chỉ xem quy trình của bạn, Perfetto ghi lại toàn bộ trạng thái thiết bị (lịch trình hạt nhân, tần số CPU, các quy trình khác và dịch vụ hệ thống), cung cấp cho bạn bối cảnh hoàn chỉnh cho các vấn đề về hiệu suất.

Hãy xem danh sách phát Gỡ lỗi hiệu suất trên YouTube để biết hướng dẫn bằng video về cách gỡ lỗi hiệu suất bằng dấu vết hệ thống, Trình phân tích tài nguyên trong Android Studio và Perfetto.

Cách sử dụng Perfetto để gỡ lỗi hiệu suất

Quy trình làm việc chung để gỡ lỗi hiệu suất bằng các công cụ phân tích dấu vết là ghi lại, tải và phân tích dấu vết. 

Bước 1: Ghi lại dấu vết

Bạn có thể ghi lại dấu vết hệ thống bằng nhiều phương thức: 

Bước 2: Tải dấu vết

Sau khi có tệp theo dõi, bạn cần tải tệp đó vào công cụ phân tích.

  1. Mở Chrome rồi chuyển đến ui.perfetto.dev.
  2. Kéo và thả tệp .perfetto-trace (hoặc .pftrace) trực tiếp vào cửa sổ trình duyệt.
  3. Giao diện người dùng sẽ xử lý tệp và hiển thị dòng thời gian.

Bước 3: Phân tích dấu vết

Bạn có thể sử dụng giao diện người dùng Perfetto hoặc Trình phân tích tài nguyên trong Android Studio để điều tra các vấn đề về hiệu suất. Hãy xem tập này của loạt bài Kỹ năng MAD (Phát triển Android hiện đại) về Hiệu suất, trong đó kỹ sư hiệu suất Carmen Jackson thảo luận về trình xem dấu vết Perfetto.

Các tình huống kiểm tra dấu vết hệ thống bằng Perfetto

Perfetto là một công cụ chuyên gia và có thể cung cấp thông tin về mọi thứ đã xảy ra trên thiết bị Android trong khi dấu vết được ghi lại. Điều này đặc biệt hữu ích khi bạn không thể xác định nguyên nhân gốc rễ của tình trạng chậm bằng nhật ký tiêu chuẩn hoặc trình phân tích tài nguyên cơ bản.

Gỡ lỗi lỗi giật (Khung hình bị rớt)

Nếu ứng dụng của bạn bị giật khi cuộn, Perfetto có thể cho bạn biết chính xác lý do một khung hình cụ thể bị lỡ thời hạn.

Nếu nguyên nhân là do ứng dụng, bạn có thể thấy luồng chính của mình chạy trong thời gian dài để phân tích cú pháp nặng; điều này cho thấy các tình huống mà bạn nên chuyển công việc sang xử lý không đồng bộ.

Nếu nguyên nhân là do hệ thống, bạn có thể thấy luồng chính của mình đã sẵn sàng chạy, nhưng trình lập lịch hạt nhân CPU đã ưu tiên cho một dịch vụ hệ thống khác, khiến ứng dụng của bạn phải chờ (tranh chấp CPU). Điều này cho thấy các tình huống mà bạn có thể cần tối ưu hoá việc sử dụng API nền tảng.

Phân tích quá trình khởi động ứng dụng chậm

Quá trình khởi động phức tạp, bao gồm khởi động hệ thống, phân nhánh quy trình và tải tài nguyên. Perfetto trực quan hoá dòng thời gian này một cách chính xác.

Bạn có thể xem liệu mình có đang chờ các lệnh gọi Binder (giao tiếp giữa các quy trình) hay không. Nếu onCreate chờ phản hồi từ PackageManager hệ thống trong thời gian dài, Perfetto sẽ hiển thị rõ trạng thái bị chặn đó. 

Bạn cũng có thể xem liệu ứng dụng của mình có đang thực hiện nhiều công việc hơn mức cần thiết trong quá trình khởi động ứng dụng hay không. Ví dụ: nếu bạn đang tạo và bố trí nhiều khung hiển thị hơn mức ứng dụng cần hiển thị, bạn có thể thấy các thao tác này trong dấu vết.

Điều tra tình trạng hao pin và mức sử dụng CPU

Vì Perfetto nhìn thấy toàn bộ hệ thống, nên công cụ này rất phù hợp để tìm các tình trạng hao pin ẩn.

Bạn có thể xác định những quy trình đang giữ khoá chế độ thức, ngăn thiết bị chuyển sang chế độ ngủ trong các dấu vết "Trạng thái thiết bị". Tìm hiểu thêm trong bài đăng trên blog về khoá chế độ thức . Ngoài ra, hãy sử dụng Perfetto để xem liệu các công việc ở chế độ nền có đang chạy quá thường xuyên hay đánh thức CPU một cách không cần thiết hay không.

Cấp 5: Xây dựng khung theo dõi hiệu suất của riêng bạn

Cấp cuối cùng dành cho các ứng dụng có nhóm có nguồn lực để duy trì khung theo dõi hiệu suất. 

Việc xây dựng khung theo dõi hiệu suất tuỳ chỉnh trên Android bao gồm việc tận dụng một số API hệ thống để thu thập dữ liệu trong suốt vòng đời ứng dụng, từ khi khởi động đến khi thoát và trong các tình huống tải cao cụ thể.

Bằng cách sử dụng ApplicationStartInfo, ProfilingManagerApplicationExitInfo, bạn có thể tạo một hệ thống đo từ xa mạnh mẽ báo cáo về cách ứng dụng của bạn khởi động, thông tin chi tiết về những gì ứng dụng đã thực hiện trong khi chạy và lý do ứng dụng bị dừng.

ApplicationStartInfo: Theo dõi cách ứng dụng khởi động

Có sẵn từ Android 15 (API 35), ApplicationStartInfo cung cấp các chỉ số chi tiết về quá trình khởi động ứng dụng trong thực tế. Dữ liệu bao gồm việc khởi động nguội, khởi động ấm hay khởi động nóng và thời lượng của các giai đoạn khởi động khác nhau. 

Điều này giúp bạn phát triển một chỉ số khởi động cơ sở bằng dữ liệu thực tế để tối ưu hoá thêm những chỉ số có thể khó tái tạo cục bộ. Bạn có thể sử dụng các chỉ số này để chạy thử nghiệm A/B nhằm tối ưu hoá quy trình khởi động.

Mục tiêu là ghi lại chính xác các chỉ số khởi chạy mà không cần đo lường từng giai đoạn khởi tạo theo cách thủ công.

Bạn có thể truy vấn dữ liệu này một cách trì hoãn một lúc sau khi khởi chạy ứng dụng.

ProfilingManager: Ghi lại lý do ứng dụng chạy chậm

ProfilingManager (API 35) cho phép ứng dụng của bạn kích hoạt theo dõi hệ thống theo cách lập trình trên thiết bị của người dùng. Điều này rất hữu ích để nắm bắt các vấn đề về hiệu suất tạm thời trong thực tế mà bạn không thể tái tạo cục bộ.

Mục tiêu là tự động ghi lại dấu vết khi một hành trình trọng yếu của người dùng cụ thể được phát hiện là đang chạy chậm hoặc gặp vấn đề về hiệu suất.

Bạn có thể đăng ký một trình nghe kích hoạt khi đáp ứng các điều kiện cụ thể hoặc kích hoạt trình nghe này theo cách thủ công khi phát hiện vấn đề về hiệu suất, chẳng hạn như lỗi giật, bộ nhớ quá mức hoặc tiêu hao pin.

Hãy xem tài liệu của chúng tôi về cách ghi lại hồ sơtruy xuất và phân tích dữ liệu phân tích tài nguyên cũng như sử dụng các lệnh gỡ lỗi.

ApplicationExitInfo: Theo dõi lý do ứng dụng bị dừng

ApplicationExitInfo (API 30) cho bạn biết lý do quy trình trước đó bị dừng. Điều này rất quan trọng để tìm các sự cố gốc, lỗi ANR hoặc hệ thống dừng do mức sử dụng bộ nhớ quá mức (OOM). Bạn cũng có thể nhận được dấu vết bia mộ chi tiết bằng cách sử dụng API getTraceInputStream.

Mục tiêu của API là hiểu các vấn đề về tính ổn định không kích hoạt trình báo cáo sự cố Java tiêu chuẩn (như Low Memory Kills).

Bạn nên kích hoạt API này trên lần khởi chạy ứng dụng tiếp theo.

Các bước tiếp theo

Cải thiện hiệu suất trên Android là một hành trình từng bước. Chúng tôi rất vui mừng được thấy cách bạn nâng cao hiệu suất bằng các công cụ này!

Hãy đón xem chương trình Hỏi Android vào ngày mai

Bạn đã rút gọn ứng dụng của mình bằng R8 và tối ưu hoá thời gian chạy bằng tính năng Tối ưu hoá theo hướng dẫn của hồ sơ. Đồng thời đo lường hiệu suất của ứng dụng.

Hãy tham gia cùng chúng tôi vào ngày mai để tham gia phiên Hỏi Android trực tiếp. Đặt câu hỏi ngay bây giờ bằng cách sử dụng #AskAndroid và nhận câu trả lời từ các chuyên gia.

Tác giả:

Tiếp tục đọc