Mục lục bài viết
Widget thời tiết trên màn hình chính iPhone vẫn hiện nắng trong khi trời đang mưa, widget lịch không cập nhật sự kiện vừa thêm, widget bước chân đứng yên dù đã đi bộ cả buổi sáng. Mở thẳng ứng dụng thì dữ liệu hoàn toàn chính xác và cập nhật tức thời, chỉ riêng widget ngoài màn hình chính là chậm hoặc đứng hình. Đây không phải lỗi vặt ngẫu nhiên mà là hệ quả trực tiếp của cách iOS giới hạn nghiêm ngặt quyền chạy nền của widget để tiết kiệm pin.
WidgetKit không cho phép widget tự chạy nền liên tục
Khác với một ứng dụng đang mở có thể tự cập nhật giao diện bất cứ lúc nào, widget trên iOS xây dựng bằng framework WidgetKit hoạt động theo nguyên tắc hoàn toàn khác: widget không tự chạy, mà hệ điều hành gọi ứng dụng chủ dậy trong khoảng thời gian rất ngắn để sinh sẵn một loạt “khung thời gian” (timeline entries), mỗi khung ứng với một thời điểm hiển thị trong tương lai, rồi ứng dụng chủ đóng lại ngay. Widget không có tiến trình nền riêng chạy độc lập để tự làm mới dữ liệu theo thời gian thực như nhiều người tưởng.
Ngân sách làm mới do hệ thống kiểm soát, không phải nhà phát triển ứng dụng
Số lần một widget được phép yêu cầu làm mới trong ngày bị giới hạn bởi một ngân sách hệ thống (refresh budget) mà nhà phát triển ứng dụng không thể tự ý tăng lên. Ngân sách này do iOS tính toán dựa trên tần suất người dùng thực sự nhìn vào widget đó, mức pin còn lại, và widget có đang hiển thị trên màn hình đang bật hay không. Widget ít được xem hoặc nằm trên màn hình chính hiếm khi lướt tới sẽ nhận ngân sách thấp hơn, dẫn tới dữ liệu cũ hơn thực tế dù ứng dụng chủ hoàn toàn không có lỗi.
Timeline được sinh trước nên độ trễ dữ liệu là tất yếu với nội dung biến động nhanh
Vì các khung thời gian được ứng dụng chủ tính toán và nạp sẵn trước, dữ liệu hiển thị trong mỗi khung là dự đoán tại thời điểm sinh timeline chứ không phải truy vấn trực tiếp lúc người dùng nhìn vào widget. Với dữ liệu biến động chậm như lịch hay ghi chú, cách này gần như không gây lệch. Nhưng với dữ liệu thay đổi nhanh như thời tiết theo giờ hoặc điểm số trực tiếp, khoảng cách giữa thời điểm sinh timeline và thời điểm người dùng thực sự xem có thể đủ dài để thông tin hiển thị đã lỗi thời.
Chế độ Low Power Mode siết chặt thêm ngân sách làm mới
Khi bật chế độ tiết kiệm pin, iOS chủ động giảm mạnh tần suất đánh thức ứng dụng để sinh timeline mới cho widget, ưu tiên kéo dài thời lượng pin hơn độ chính xác dữ liệu hiển thị ngoài màn hình chính. Widget vốn đã ít được ưu tiên làm mới nay càng bị kéo dài chu kỳ cập nhật hơn nữa, đây là lý do nhiều người nhận thấy widget đứng hình rõ rệt hơn hẳn vào những ngày bật chế độ tiết kiệm pin cả ngày. Xoá widget rồi thêm lại thường khiến dữ liệu mới hiện ngay vì hệ thống buộc phải sinh timeline hoàn toàn mới, nhưng đây chỉ là hiệu ứng tạm thời của lần khởi tạo đầu, ngân sách làm mới định kỳ sau đó vẫn quay lại đúng mức đã tính toán dựa trên thói quen sử dụng.
Hiểu nhầm thường gặp
Nhiều người nghĩ widget không cập nhật là do lỗi kết nối mạng hoặc do máy quá chậm để xử lý, nên thử khởi động lại máy nhiều lần. Trên thực tế nguyên nhân gốc là cơ chế quản lý ngân sách làm mới có chủ đích của hệ điều hành nhằm tiết kiệm pin, không liên quan tới tốc độ xử lý hay chất lượng kết nối mạng của máy, nên khởi động lại máy hiếm khi giải quyết được tận gốc vấn đề.
Xem thêm
Xem thêm tại hub Chậm, lag, đứng máy: tổng hợp bài viết và bài iPhone bị treo, đơ, tự khởi động lại để phân biệt với các dạng đơ nghiêm trọng hơn ở cấp hệ điều hành. Để tra cứu thông tin gốc, có thể xem thêm tại trang hỗ trợ chính thức của Apple.
