2012-12-11 28 views
8

Tôi dường như có vấn đề nan giải, tôi đã trải qua cuối tuần trên đó, không thể khắc phục được sự cố. Khi tôi thực hiện một ứng dụng thử nghiệm đơn giản với hai hoạt động: 1. Tính chủ động: một vài nút, bộ đếm thời gian (chủ đề nền) và yêu cầu ánh sáng cho một db SQLite. 2. Hoạt động thứ hai: một vài nút, chỉ có một nút có trình nghe nhấp chuột, khi bạn nhấp vào, bạn chỉ cần quay lại hoạt động đầu tiên. Tôi sử dụng các nút lớn (chiều rộng màn hình khoảng một phần tư chiều cao màn hình), tài nguyên bố cục xml không chứa bất kỳ yếu tố trọng lượng lồng nhau hoặc những thứ kỳ lạ khác.Hiệu suất Android api cấp 11 trở lên

Đây là dự án thử nghiệm, không có chức năng nào khác.

Tôi gặp vấn đề nghiêm trọng sau: -khi tôi đặt cấp api trong tệp kê khai thành 3, mọi thứ hoạt động hoàn hảo. (màn hình tự động ở chế độ tương thích) -khi tôi đặt mức api 11 trở lên, có thể mất tối đa 10 giây để hoạt động thứ hai tải. Sau lần đầu tiên mở hoạt động thứ hai, mọi thứ dường như được lưu vào bộ nhớ cache, sự chậm trễ không còn tồn tại nữa. -khi tôi đặt mức api thành 11 hoặc cao hơn, và chế độ tương thích cưỡng bức (màn hình res): không thay đổi, độ trễ vẫn còn.

Tôi đã tạo dự án thử nghiệm này vì tôi đã gặp sự cố này khi nâng cấp ứng dụng cũ hơn. Nó chạy trơn tru trên các cấp độ api cũ hơn, bất cứ khi nào tôi đặt nó lên Android phiên bản 3 trở lên, nó sẽ bị trễ tới 25 giây! (ngay cả khi mở một hoạt động chỉ hiển thị văn bản tĩnh ...).

Tôi đang thử nghiệm trên một Tab Galaxy mới, điều đó không thể là vấn đề. Tôi đã dành hàng giờ để giải quyết một giải pháp, không bao giờ tìm thấy bất cứ thứ gì gần với nó. Tôi thậm chí hoàn toàn không cài đặt Eclipse và tất cả các tài nguyên Android và có mọi thứ mới được cài đặt và cập nhật (bao gồm thiết lập lại nhà máy của Galaxy Tab). Không may mắn.

Tôi đã theo dõi, sự cố nằm trong GLES20Canvas.nDrawDisplayList. Dường như việc xây dựng danh sách này mất rất nhiều thời gian, ngay cả khi không có nhiều thứ để xây dựng ...

Có ai có manh mối về cách tôi có thể giải quyết vấn đề này không?

Cảm ơn, Martin

Trả lời

1

GLES20Canvas.nDrawDisplayList

khi này do thỏa thuận đó là expected to have a large portion of the time if you are drawing a lot, especially very big views.

tôi muốn bạn cung cấp cho bạn liên kết cho của Đỗ và Dont của từ android-30-hardware-acceleration

+1

Cảm ơn.Tôi đã đọc bài báo đó trước đó và thử nghiệm. Không may mắn. Thực tế là ngay cả một textview đơn giản cũng cần giây để render (không có gì khác trong layout). Giải pháp duy nhất tôi đã tìm thấy cho đến nay hoạt động là vô hiệu hóa tăng tốc phần cứng. – martin

+0

Romain Guy chỉ là một nhà biện hộ cho Google và không thể bị làm phiền để giải quyết các vấn đề thực sự mà các nhà phát triển đang gặp phải. – StackOverflowed

3

Tôi đã tìm thấy một giải pháp cho vấn đề này bằng cách kiểm tra bài đăng này: http://code.google.com/p/android/issues/detail?id=22514

Giải pháp là để vô hiệu hóa khả năng tăng tốc phần cứng.

Trong AndroidManifest.xml, trong thẻ ứng dụng của bạn, thêm:

android:hardwareAccelerated="false" 

Bây giờ tất cả mọi thứ chạy trơn tru trở lại. Rất tiếc, tăng tốc phần cứng không làm cho ứng dụng của bạn chạy nhanh hơn khi khởi động.

+0

Bạn có thể không muốn tắt tăng tốc phần cứng cho tất cả các thiết bị, xem -> http://stackoverflow.com/a/21791909/546901 Tôi chỉ nhận thấy sự cố này trên một thiết bị, thiết bị HTC. Kết quả traceview cho thấy vấn đề là với nDrawDisplayList. Kết quả Traceview cho bất kỳ thiết bị nào khác mà tôi đã thử là tốt. Nó dường như ngụ ý một thiết bị hoặc lỗi cấp hệ điều hành, không phải là một lỗi với mã ứng dụng. Nó có vẻ dễ dàng để tái sản xuất với listview độ sâu thấp hoặc scrollview trên các thiết bị mọi người đang báo cáo nhìn thấy vấn đề này (HTC One hoặc Galaxy Nexus). –

Các vấn đề liên quan