Tôi có một danh sách khá đơn giản với 3 trường văn bản trên mỗi hàng. Chúng tôi đang cập nhật giá trị của chúng sau mỗi 2 giây hoặc lâu hơn với dữ liệu đến từ cuộc gọi webservice nền (AsyncTask)ArrayAdapter của ListView notifydatasetchanged() vẽ lại rất chậm
Chúng tôi so sánh các giá trị sắp tới, cập nhật chúng cho phù hợp và cuối cùng gọi đến notifyDataSetChanged() nếu cần
Điều này là vẽ lại rất chậm, do đó treo toàn bộ giao diện người dùng khi chúng tôi có nhiều hơn 3 hàng cập nhật cùng một lúc. Tất nhiên chúng tôi đang sử dụng tất cả các tối ưu hóa ListView nổi tiếng như phương pháp tiếp cận EfficientAdapter (setTag() và chủ sở hữu), và getViewTypecount()/getItemViewType(). Chúng tôi cũng đã cố gắng tối ưu hóa giao diện của mình càng nhiều càng tốt với layoutopt và cố gắng tránh chiều rộng wrap_content và chiều cao để làm sáng mọi thứ.
Chúng tôi không thực hiện các hoạt động đắt tiền trên các bản cập nhật của mình, chỉ là công cụ chuẩn: thay đổi văn bản TextView, textcolor và các giá trị màu nền.
Điều lạ duy nhất tôi có thể thấy là getView() được gọi 3-4-5 lần cho mỗi hàng, mặc dù tôi đã đọc tất cả tin những của Romain [1] nói rằng không có gì sai với điều đó
Bất kỳ ý tưởng hay gợi ý nào về cách chúng ta có thể tăng tốc nó?
Cảm ơn bạn rất nhiều!
Có vẻ như bạn đang nhận được nhiều cập nhật hơn bạn có thể vẽ - bạn đã thử giảm tần suất cập nhật xuống 10 giây để kiểm tra điều này chưa? Nếu điều này giúp bạn sẽ cần phải tìm một giải pháp để xóa hàng đợi từ nhiệm vụ với mỗi lần cập nhật. 2 giây là khá thường xuyên nếu bạn xem xét việc thu gom rác tự động có thể mất đến 1 giây (hy vọng không nhiều hơn) và các dịch vụ khác có thể trì hoãn cập nhật. –
Các cuộc gọi liên tiếp, vì vậy các cuộc gọi mới được thực thi khi kết thúc trước. – Albert
Trường hợp thu gom rác thải tồi tệ nhất mất hơn 200ms, đó là không có gì so với giao diện người dùng 1,5 - 2 s treo mà trải nghiệm ứng dụng trên mỗi lần vẽ lại. Tốc độ làm mới không ảnh hưởng ở đây, ngay cả khi tôi tăng lên 10 giây, sau khi cuộc gọi được kích hoạt, việc vẽ lại sẽ tiếp tục đóng băng trong 2 giây đó – Albert