Android & Kiến trúc
Giữ đúng kết quả tìm kiếm khi phản hồi đến sai thứ tự
Dùng mã thế hệ để chặn phản hồi cũ ghi đè truy vấn mới trên Android.
Thích và đánh giá Bình luận và hỏi đáp1. Dựng lịch thực thi gây lỗi
Người dùng gõ “ki” rồi gõ tiếp “kiểm thử”. Phản hồi truy vấn đầu mất 400 ms, truy vấn sau chỉ mất 100 ms. Nếu mọi callback đều cập nhật giao diện, kết quả cũ có thể xuất hiện cuối cùng. Lỗi này vẫn có thể xảy ra khi cả hai phản hồi đều thành công, vì vấn đề nằm ở quan hệ giữa dữ liệu và ý định gần nhất.
2. Dùng phiên bản cho cả dữ liệu và lỗi
Mỗi truy vấn tăng một mã thế hệ. Khi callback chạy, chỉ cập nhật nếu mã của nó còn là mã hiện tại. Điều kiện áp dụng cả kết quả thành công, lỗi và trạng thái đang tải. Hủy tác vụ cũ giúp giảm chi phí, còn kiểm tra mã bảo vệ trường hợp tác vụ đã hoàn thành và callback đang chờ được xử lý.
3. Mô phỏng đảo thứ tự một cách xác định
Mẫu Python mô phỏng bộ giữ trạng thái. Ta phát hai truy vấn rồi chuyển kết quả mới vào trước, sau đó phát callback cũ. Kết quả hiển thị vẫn thuộc truy vấn thứ hai. Đưa cùng phép thử vào ViewModel bằng nguồn dữ liệu giả có thể điều khiển thứ tự hoàn thành, thay vì phụ thuộc độ trễ mạng thật.
Chạy ví dụ bằng python android_phan_hoi_den_sai_thu_tu.py.
Môi trường thực hành. Python 3.10 trở lên. Ví dụ dùng thư viện chuẩn Python. Đây là mô hình Python để kiểm tra logic trước khi chuyển sang dự án Android.
class TimKiem:
def __init__(self):
self.phien = 0
self.hien_thi = None
def gui(self):
self.phien += 1
return self.phien
def nhan(self, phien, noi_dung):
if phien == self.phien:
self.hien_thi = noi_dung
man_hinh = TimKiem()
cu, moi = man_hinh.gui(), man_hinh.gui()
man_hinh.nhan(moi, ["Kiểm thử phần mềm"])
man_hinh.nhan(cu, ["Kỹ thuật lập trình"])
assert man_hinh.hien_thi == ["Kiểm thử phần mềm"]
print(man_hinh.hien_thi)4. Xem xét phạm vi của mã thế hệ
Mã có thể quản lý theo màn hình hoặc theo mỗi luồng truy vấn. Nếu có cả gợi ý và kết quả đầy đủ, dùng trạng thái riêng hoặc cùng mã với hai trường tách biệt. Trong Android, xử lý cập nhật trên luồng sở hữu trạng thái và xác định cách khôi phục truy vấn sau khi tiến trình bị thu hồi.
Đọc thêm Hướng dẫn kiến trúc ứng dụng Android.