Chào mừng bạn đến với TiemDienThoai.com
Kiến thức · Hệ điều hành Android

Widget trên màn hình chính Android không cập nhật dữ liệu, bị treo: nguyên nhân từ tối ưu pin

Widget phụ thuộc chu kỳ đánh thức AppWidgetProvider bị Doze/App Standby và lớp tối ưu pin riêng của hãng trì hoãn.

Mục lục bài viết

Widget thời tiết vẫn hiện nắng trong khi ngoài trời đang mưa, widget lịch vẫn ghim sự kiện của tuần trước, widget nhắc việc đứng im dù đã đánh dấu hoàn thành trong ứng dụng – chạm vào widget không phản hồi, phải mở hẳn ứng dụng gốc mới thấy dữ liệu đúng. Đây là hệ quả trực tiếp của các cơ chế tối ưu pin trên Android hiện đại, vốn hạn chế đúng loại hoạt động mà widget cần để cập nhật đều đặn.

Widget phụ thuộc vào lịch cập nhật do hệ thống cấp

Khác với ứng dụng đang mở, widget trên màn hình chính không có tiến trình riêng chạy liên tục. Nó hoạt động theo cơ chế AppWidgetProvider, được hệ thống đánh thức theo chu kỳ đã khai báo, thường vài chục phút một lần, để yêu cầu ứng dụng gốc cung cấp dữ liệu mới rồi vẽ lại giao diện. Nếu ứng dụng gốc bị đưa vào trạng thái hạn chế, widget sẽ đứng yên ở dữ liệu cũ mà không có dấu hiệu lỗi nào hiển thị.

Doze mode và App Standby trì hoãn việc đánh thức

Khi máy không cắm sạc và đứng yên một thời gian, Android chuyển sang chế độ Doze, hoãn phần lớn tác vụ nền kể cả yêu cầu đánh thức để cập nhật widget, gom chúng thành từng đợt thưa hơn nhằm giảm số lần bật CPU. Ứng dụng ít mở trực tiếp trong ngày còn bị xếp vào nhóm App Standby Bucket thấp, khiến chu kỳ cập nhật widget kéo dài hơn nhiều so với khai báo gốc.

Tối ưu pin theo hãng máy siết chặt hơn mặc định

Nhiều giao diện tuỳ biến có thêm một lớp quản lý pin riêng, độc lập với Doze gốc, tự động đưa ứng dụng ít dùng vào danh sách hạn chế nền còn khắt khe hơn. Khi ứng dụng cung cấp dữ liệu cho widget bị lớp này chặn hoàn toàn, widget sẽ ngừng cập nhật cho đến khi ứng dụng được mở trực tiếp một lần, dù cài đặt Doze gốc không hạn chế ứng dụng đó.

Widget treo do tiến trình vẽ lại giao diện gặp lỗi dữ liệu

Khác với chỉ chậm cập nhật, một số widget treo hẳn, không phản hồi khi chạm, do RemoteViews (cơ chế vẽ giao diện widget từ xa) nhận dữ liệu không hợp lệ và không xử lý được, dẫn đến widget đóng băng ở trạng thái vẽ dở. Trường hợp này thường xảy ra ngay sau khi ứng dụng gốc lên phiên bản mới thay đổi cấu trúc dữ liệu mà widget cũ chưa tương thích.

Cách khắc phục theo từng nguyên nhân

Nếu widget chỉ chậm cập nhật, vào cài đặt pin của ứng dụng liên quan, chọn chế độ không giới hạn thay vì tối ưu hoá tự động, đưa ứng dụng ra khỏi danh sách hạn chế nền của cả Android gốc lẫn lớp quản lý riêng của hãng. Nếu widget đứng hình hoàn toàn, gỡ widget khỏi màn hình chính rồi ghim lại từ đầu thường buộc hệ thống tạo lại phiên RemoteViews mới. Với widget phụ thuộc dữ liệu thời gian thực như thời tiết, kiểm tra thêm quyền vị trí vì một số widget ngừng cập nhật khi quyền này bị thu hồi.

Hiểu nhầm thường gặp

“Xoá rồi ghim lại widget là thao tác thừa, không giải quyết được gì.” Ghim lại widget buộc hệ thống khởi tạo một phiên AppWidgetProvider hoàn toàn mới, khác với chỉ chạm vào widget cũ đang giữ trạng thái vẽ lỗi. Đây là cách nhanh nhất để loại bỏ một phiên RemoteViews bị treo mà không cần xoá dữ liệu hay cấu hình lại ứng dụng gốc.

Xem thêm

Nội dung này thuộc cụm bài Lỗi phần mềm Android thường gặp: tổng hợp bài viết. Xem thêm Thông báo Android không hiện dù đã bật, hoặc hiện trễ: nguyên nhân từ tối ưu pin quá mức. Thông tin kỹ thuật chi tiết hơn được công bố tại trang hỗ trợ Android chính thức của Google.

Vũ Thị Ngọc Hà - chuyên gia phần mềm và bảo mật
Tác giả phụ trách chuyên mục

Chuyên gia phần mềm & bảo mật — Nhiều năm theo dõi các bản cập nhật iOS và Android, chuyên sâu về bảo mật dữ liệu di động và quyền riêng tư ứng dụng.

Xem hồ sơ và chuyên môn →
Bình luận bài viết

Để lại bình luận

Thông tin liên hệ chỉ dùng để phản hồi, không hiển thị công khai.