Dưới đây là một lời giải thích chi tiết hơn:
Biên đạo múa cho phép các ứng dụng tự kết nối với vsync và sắp xếp thời gian hợp lý để cải thiện hiệu suất.
Android xem hoạt hình trong nội bộ sử dụng Biên đạo múa cho cùng một mục đích: để định thời gian cho hoạt ảnh và có thể cải thiện hiệu suất.
Vì Biên đạo được thông báo về mọi sự kiện vsync, tôi có thể biết liệu một trong số các Runnables được biên đạo bởi Choreogograph.post * apis không kết thúc trong một khung hình, khiến các khung hình bị bỏ qua.
Theo hiểu biết của tôi Biên đạo múa chỉ có thể phát hiện bỏ qua khung. Nó không có cách nào để nói tại sao điều này xảy ra.
Tin nhắn Ứng dụng có thể làm quá nhiều việc trên luồng chính của nó. có thể gây hiểu nhầm
nguồn:
Ý nghĩa của các thông điệp biên đạo múa trong Logcat
Tại sao bạn nên quan tâm
Khi thông báo này bật lên trên trình giả lập Android và số lượng khung hình bị bỏ qua khá nhỏ (<100) thì bạn có thể đặt cược an toàn cho trình giả lập bị chậm - điều này xảy ra gần như mọi lúc. Nhưng nếu số lượng khung hình bị bỏ qua và lớn và theo thứ tự 300+ thì có thể có một số rắc rối nghiêm trọng với mã của bạn. Các thiết bị Android có rất nhiều phần cứng không giống như các thiết bị ios và windows. RAM và CPU khác nhau và nếu bạn muốn có hiệu suất và trải nghiệm người dùng hợp lý trên tất cả các thiết bị thì bạn cần khắc phục điều này. Khi các khung bị bỏ qua, giao diện người dùng chậm và chậm, đó không phải là trải nghiệm người dùng mong muốn.
Cách khắc phục
Việc sửa lỗi này đòi hỏi phải xác định các nút nơi có hoặc có thể xảy ra trong thời gian dài xử lý. Cách tốt nhất là thực hiện tất cả quá trình xử lý cho dù nhỏ hay lớn trong một luồng tách biệt với luồng UI chính. Vì vậy, nó có thể truy cập vào cơ sở dữ liệu SQLite Database hoặc thực hiện một số phép toán khó hoặc đơn giản là sắp xếp một mảng - Thực hiện trong một luồng khác
Bây giờ có một lưu ý ở đây, Bạn sẽ tạo một Chủ đề mới để thực hiện các thao tác này và khi bạn chạy ứng dụng của mình, nó sẽ gặp sự cố Chỉ có chủ đề ban đầu tạo phân cấp chế độ xem có thể chạm vào chế độ xem của nó. Bạn cần biết thực tế này rằng UI trong Android chỉ có thể được thay đổi bởi luồng chính hoặc luồng UI. Bất kỳ chủ đề nào khác cố gắng để làm như vậy, thất bại và gặp sự cố với lỗi này. Những gì bạn cần làm là tạo một Runnable mới bên trong runOnUiThread và bên trong runnable này, bạn nên thực hiện tất cả các hoạt động liên quan đến UI. Tìm một ví dụ ở đây .
Vậy chúng ta có Thread và Runnable để xử lý dữ liệu ngoài Thread chính, còn gì nữa không? Có AsyncTask trong Android cho phép thực hiện các quy trình thời gian dài trên luồng UI. Điều này hữu ích nhất khi các ứng dụng của bạn được điều khiển dữ liệu hoặc điều khiển api trên web hoặc sử dụng các giao diện người dùng phức tạp giống như các bản dựng sử dụng Canvas. Sức mạnh của AsyncTask là cho phép thực hiện mọi thứ trong nền và sau khi bạn hoàn tất quá trình xử lý, bạn chỉ cần thực hiện các hành động cần thiết trên UI mà không gây ra bất kỳ hiệu ứng trễ nào. Điều này có thể xảy ra vì AsyncTask xuất phát từ luồng UI của Activity - tất cả các thao tác bạn thực hiện trên UI qua AsyncTask đều được thực hiện là một luồng khác với luồng UI chính, Không cản trở tương tác của người dùng.
Vì vậy, đây là những gì bạn cần biết để tạo ra các ứng dụng Android mượt mà và theo tôi biết mọi người mới bắt đầu đều nhận được thông báo này trên bảng điều khiển của mình.