2012-12-01 32 views
9

Tôi đã phát triển và thử nghiệm một ứng dụng trên Android 3.2, ứng dụng này tương tác với cơ sở dữ liệu SQLite và hiển thị kết quả trên màn hình. Tôi không có hình động hay bất cứ thứ gì lạ mắt. Những gì tôi có là rất nhiều ListViews để hiển thị dữ liệu cho người dùng.Ứng dụng của tôi chạy chậm hơn đáng kể trên Android 4.0

Cơ sở dữ liệu cho ứng dụng rất lớn, với các bảng có nhiều hơn 300 nghìn hàng. Chúng tôi đã cố gắng sử dụng AsyncTask trong mọi tương tác với cơ sở dữ liệu, nhưng có một số điểm chúng tôi vẫn phải tối ưu hóa hiệu suất.

Vấn đề là công ty đã cập nhật một số máy tính bảng lên Ice Cream Sandwich và ứng dụng chậm hơn nhiều so với trên Honeycomb. Tôi nạp cùng một mã, với cùng một db, trong hai thiết bị, một thiết bị chạy ICS và một với Honeycomb. Ứng dụng hoạt động tốt hơn nhiều trong thiết bị 3.2. Tôi cũng đã thử sử dụng <uses-sdk android:minSdkVersion="14" /> nhưng nó không hoạt động tốt hơn.

Tôi có thể làm gì để tối ưu hóa hiệu suất trên 4.0 không? Tôi cũng rất muốn biết tại sao điều này xảy ra và nếu có bất cứ điều gì có thể gây ra điều đó (một số thành phần hoặc lớp học không hoạt động tốt trên 4.0).

Cảm ơn!

CẬP NHẬT: Tôi đã tìm thấy giải pháp cho màn hình chính của ứng dụng. Tôi đã trình bày một mảnh làm việc như một danh sách ngang, nó là một HorizontalScrollView đã tải một danh sách lớn dữ liệu và tạo ra rất nhiều LinearLayout để được trình bày bên trong ScrollView. Tôi tìm thấy một tiện ích của một số HorizontalListView và sử dụng nó để tải danh sách của tôi. Điều đó đã làm cho ứng dụng nhanh hơn. Nhưng tôi không tìm thấy câu trả lời vì sao nó lại chậm hơn trên ICS.

Tôi cũng đã cố gắng lược tả ứng dụng, nhưng đó là một việc rất khó làm, có rất nhiều thông tin. Tôi có lẽ sẽ vẫn làm điều đó trong những tuần tới để tăng tốc ứng dụng. Cảm ơn tất cả các câu trả lời và bình luận!

+0

Bạn đã kiểm tra kích thước heap bằng cách sử dụng các công cụ DDMS trên cả hai thiết bị? – Talha

+3

Trước khi chuyển đến kết luận, bạn nên [hồ sơ ứng dụng của bạn] (http://developer.android.com/tools/debugging/debugging-tracing.html) trên cả hai thiết bị, xem nơi nút cổ chai là. – Felix

+1

Tôi hỏi nó bởi vì, tôi đã phải đối mặt với cùng một vấn đề trước đây. Vì vậy, kích thước heap valvik vm được đặt trên tệp tùy chọn /system/build.prop trên mỗi phiên bản/thiết bị Android. Khóa tùy chọn chính xác là dalvik.vm.heapsize. Giá trị bằng megabyte và nó phụ thuộc vào khả năng của thiết bị. Do đó, ứng dụng của bạn có thể hoạt động khác nhau trên các thiết bị khác nhau. – Talha

Trả lời

2

Đoán của tôi là nó có liên quan đến hardware accelerationdefault enabled for ice cream sandwich. Tăng tốc phần cứng là tốt đẹp nhưng nó sometimes comes with a performance decline.

Có một thú vị khác là read về tăng tốc phần cứng Android của Dianne Hackborn trên google + Tôi khuyên bạn nên xem xét.

+0

sau nhiều giờ cố gắng giải quyết vấn đề này - bạn đã cứu tôi! cảm ơn bạn. – Gdroid

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