Các nghiên cứu điển hình
Cách WHOOP giảm hơn 90% số phiên khoá chế độ thức một phần quá mức
Đọc trong 4 phút
Việc xây dựng một ứng dụng Android cho thiết bị đeo có nghĩa là công việc thực sự bắt đầu khi màn hình tắt. WHOOP giúp các thành viên hiểu được cách cơ thể phản ứng với quá trình tập luyện, phục hồi, giấc ngủ và căng thẳng. Đối với nhiều thành viên WHOOP trên Android, khả năng kết nối và đồng bộ hoá đáng tin cậy ở chế độ nền là những yếu tố giúp họ có được thông tin chi tiết đó.
Đầu năm nay, Google Play đã phát hành một chỉ số mới trong Android vitals: Khoá chế độ thức một phần quá mức. Chỉ số này đo lường tỷ 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ờ trong khoảng thời gian 24 giờ. Mục tiêu của chỉ số này là giúp bạn xác định và giải quyết các nguồn có thể gây tiêu hao pin, điều này rất quan trọng để mang lại trải nghiệm tuyệt vời cho người dùng.
Kể từ ngày 1 tháng 3 năm 2026, những ứng dụng tiếp tục không đáp ứng ngưỡng chất lượng có thể bị loại trừ khỏi các nền tảng khám phá của Google Play. Một cảnh báo cũng có thể được đặt trên trang thông tin trên Cửa hàng Play, cho biết ứng dụng có thể sử dụng nhiều pin hơn dự kiến.
Theo Mayank Saini, Kỹ sư Android cấp cao tại WHOOP, điều này "mang đến cho nhóm cơ hội nâng cao hiệu quả của Android" sau khi Android vitals gắn cờ tỷ lệ phần trăm khoá chế độ thức một phần quá mức của ứng dụng là 15% – vượt quá ngưỡng 5% được đề xuất.
Nhóm này xem chỉ số Android vitals là một tín hiệu rõ ràng cho thấy công việc ở chế độ nền của họ đang giữ cho CPU hoạt động lâu hơn mức cần thiết. Việc giải quyết vấn đề này sẽ cho phép họ tiếp tục mang lại trải nghiệm tuyệt vời cho người dùng, đồng thời giảm thời gian lãng phí ở chế độ nền và duy trì khả năng kết nối cũng như đồng bộ hoá Bluetooth đáng tin cậy và kịp thời.
Xác định vấn đề
Để tìm hiểu nơi bắt đầu, trước tiên, nhóm đã chuyển sang Android vitals để biết thêm thông tin chi tiết về những khoá chế độ thức đang ảnh hưởng đến chỉ số. Bằng cách tham khảo trang tổng quan về tình trạng khoá chế độ thức một phần quá mức của Android vitals, họ có thể xác định thành phần đóng góp lớn nhất vào tình trạng khoá chế độ thức một phần quá mức là một trong các worker WorkManager (được xác định trong trang tổng quan là androidx.work.impl.background.systemjob.SystemJobService). Để hỗ trợ "trải nghiệm luôn bật" của WHOOP, ứng dụng này sử dụng WorkManager cho các tác vụ ở chế độ nền như đồng bộ hoá định kỳ và cung cấp các bản cập nhật định kỳ cho thiết bị đeo.
Mặc dù nhóm đã biết rằng WorkManager thu thập một khoá chế độ thức trong khi thực thi các tác vụ ở chế độ nền, nhưng trước đây, họ không có khả năng hiển thị về cách phân phối tất cả công việc ở chế độ nền (ngoài WorkManager) cho đến khi chỉ số khoá chế độ thức một phần quá mức được giới thiệu trong Android vitals.
Khi trang tổng quan xác định WorkManager là thành phần đóng góp chính, nhóm có thể tập trung nỗ lực vào việc xác định worker nào đang đóng góp nhiều nhất và nỗ lực giải quyết vấn đề.
Tận dụng các chỉ số và dữ liệu nội bộ để thu hẹp nguyên nhân
WHOOP đã thiết lập cơ sở hạ tầng nội bộ để theo dõi các chỉ số WorkManager. Họ định kỳ theo dõi:
- Thời gian chạy trung bình: Worker chạy trong bao lâu?
- Thời gian chờ: Worker chờ bao lâu thay vì hoàn tất?
- Số lần thử lại: Worker thử lại bao lâu nếu công việc hết thời gian chờ hoặc không thành công?
- Số lần huỷ: Công việc bị huỷ bao lâu?
Việc theo dõi không chỉ số lần thành công và thất bại của worker giúp nhóm có khả năng hiển thị về hiệu quả công việc của họ.
Các chỉ số nội bộ gắn cờ thời gian chạy trung bình cao cho một số ít worker, cho phép họ thu hẹp phạm vi điều tra hơn nữa.
Ngoài các chỉ số nội bộ, nhóm này cũng sử dụng Công cụ kiểm tra tác vụ trong nềncủa Android Studio để kiểm tra và gỡ lỗi các worker mà họ quan tâm, tập trung cụ thể vào các khoá chế độ thức được liên kết, để phù hợp với chỉ số được gắn cờ trong Android vitals.
Điều tra: Phân biệt giữa các biến thể worker
WHOOP sử dụng cả tính năng lên lịch một lần và định kỳ cho một số worker. Điều này cho phép ứng dụng sử dụng lại cùng một logic Worker cho các tác vụ giống hệt nhau có cùng tiêu chí thành công, chỉ khác nhau về thời gian.
Việc sử dụng các chỉ số nội bộ giúp họ thu hẹp phạm vi tìm kiếm thành một worker cụ thể, nhưng họ không thể biết liệu lỗi có xảy ra khi worker là một lần, định kỳ hay cả hai. Vì vậy, họ đã triển khai bản cập nhật để sử dụng phương thức setTraceTag của WorkManager nhằm phân biệt giữa các biến thể một lần và định kỳ của cùng một Worker.
Thông tin chi tiết bổ sung này sẽ cho phép họ xác định rõ ràng biến thể Worker nào (định kỳ hoặc một lần) đang đóng góp nhiều nhất vào các phiên có tình trạng khoá chế độ thức một phần quá mức. Tuy nhiên, nhóm đã rất ngạc nhiên khi dữ liệu cho thấy không có biến thể nào đóng góp nhiều hơn biến thể còn lại.
Manmeet Tuteja, Kỹ sư Android II tại WHOOP cho biết "việc phân tách đó cũng giúp chúng tôi xác nhận rằng vấn đề đang xảy ra ở cả hai biến thể, điều này cho thấy vấn đề không phải là cấu hình lập lịch mà là vấn đề về logic kinh doanh dùng chung bên trong quá trình triển khai worker".
Tìm hiểu sâu hơn về hành vi của worker và khắc phục nguyên nhân gốc rễ
Với kiến thức rằng họ cần xem xét logic trong worker, nhóm đã kiểm tra lại hành vi của worker đối với những worker đã được gắn cờ trong quá trình điều tra. Cụ thể, họ đang tìm kiếm các trường hợp công việc có thể bị kẹt và không hoàn tất.
Tất cả những điều này đều dẫn đến việc tìm ra nguyên nhân gốc rễ của tình trạng khoá chế độ thức quá mức:
Một CoroutineWorker được thiết kế để chờ kết nối với cảm biến WHOOP trước khi tiếp tục.
Nếu công việc bắt đầu mà không có cảm biến nào được kết nối, thì whoopSensorFlow – cho biết liệu cảm biến có được kết nối hay không – là null. SensorWorker không coi đây là điều kiện thoát sớm và tiếp tục chạy, chờ kết nối vô thời hạn. Do đó, WorkManager giữ một khoá chế độ thức một phần cho đến khi công việc hết thời gian chờ, dẫn đến mức sử dụng khoá chế độ thức ở chế độ nền cao và việc lên lịch lại SensorWorker thường xuyên, không mong muốn.
Để giải quyết vấn đề này, nhóm WHOOP đã cập nhật logic worker để kiểm tra trạng thái kết nối trước khi cố gắng thực thi logic kinh doanh cốt lõi.
Nếu cảm biến không hoạt động, worker sẽ thoát, tránh trường hợp hết thời gian chờ và giải phóng khoá chế độ thức. Đoạn mã sau đây cho thấy giải pháp:
class SensorWorker(appContext: Context, params: WorkerParameters): CoroutineWorker(appContext, params) { override suspend fun doWork(): Result { ... // Check the sensor state and perform work or return failure return whoopSensorFlow.replayCache .firstOrNull() ?.let { cachedData -> processSensorData(cachedData) Result.success() } ?: run { Result.failure() } }
Giảm 90% số phiên có tình trạng khoá chế độ thức một phần quá mức
Sau khi triển khai bản sửa lỗi, nhóm tiếp tục theo dõi trang tổng quan Android vitals để xác nhận tác động của các thay đổi.
Cuối cùng, WHOOP đã thấy tỷ lệ phần trăm khoá chế độ thức một phần quá mức giảm từ 15% xuống dưới 1% chỉ 30 ngày sau khi triển khai các thay đổi đối với Worker.
Do các thay đổi này, nhóm đã thấy ít trường hợp công việc hết thời gian chờ mà không hoàn tất, dẫn đến thời gian chạy trung bình thấp hơn.
Lời khuyên của nhóm WHOOP dành cho các nhà phát triển khác muốn cải thiện hiệu quả công việc ở chế độ nền:
Bắt đầu
Nếu bạn muốn thử giảm tình trạng khoá chế độ thức một phần quá mức của ứng dụng hoặc cố gắng cải thiện hiệu quả của worker, hãy xem chỉ số khoá chế độ thức một phần quá mức của ứng dụng trong Android vitals và xem tài liệu về khoá chế độ thức để biết thêm các phương pháp hay nhất và chiến lược gỡ lỗi.
Tiếp tục đọc
-
Các nghiên cứu điển hình
Monzo là một ngân hàng kỹ thuật số ở Vương quốc Anh với 15 triệu khách hàng và đang phát triển. Khi ứng dụng mở rộng quy mô, nhóm kỹ thuật đã xác định thời gian khởi động ứng dụng là một lĩnh vực quan trọng cần cải thiện nhưng lo ngại rằng việc này sẽ đòi hỏi những thay đổi đáng kể đối với cơ sở mã của họ.
Ben Weiss • Đọc trong 2 phút
-
Các nghiên cứu điển hình
TikTok là một nền tảng video ngắn toàn cầu nổi tiếng với cơ sở người dùng khổng lồ và các tính năng cải tiến.
Ben Trengrove, Ajesh Pai • Đọc trong 2 phút
-
Các nghiên cứu điển hình
Trong thế giới năng động của mạng xã hội, sự chú ý của người dùng có thể nhanh chóng bị thu hút hoặc mất đi. Các ứng dụng của Meta (Facebook và Instagram) là một trong những nền tảng xã hội lớn nhất thế giới và phục vụ hàng tỷ người dùng trên toàn cầu.
Mayuri Khinvasara Khabya • Đọc trong 4 phút
Nhận thông tin cập nhật
Nhận thông tin chi tiết mới nhất về quá trình phát triển Android được gửi đến hộp thư đến của bạn hằng tuần.