cuốn sách gpt4 ai đã làm

android - Hiệu suất vẽ hình ảnh WallpaperService

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:20:54 27 4
mua khóa gpt4 Nike

Tôi đang phát triển hình nền động cho Android. Mã hoạt động nhưng tôi đang gặp vấn đề về hiệu suất. Về cơ bản tôi đang vẽ ảnh bitmap và di chuyển chúng. Có 15 hình ảnh nhỏ và hiệu ứng rất tuyệt vời. Nhưng với 50 hình ảnh lớn hơn, nó bắt đầu bị lag.

Trong đối tượng di động của mình, tôi tạo bitmap trong hàm tạo và hiển thị nó như thế này:

public void drawFrame(Canvas canvas) {
Vị trí p = movingStrategy.move();
Ma trận ma trận = Ma trận mới();
ma trận.postScale(tỷ lệ, tỷ lệ);
ma trận.postRotate(p.getRotation());
ma trận.postTranslate(p.getPositionX(), p.getPositionY());
canvas.drawBitmap(bitmap, ma trận, sơn);
}

Trong dịch vụ hình nền của tôi, tôi gọi onDraw như thế này:

 rút thăm khoảng trống riêng tư () {
handler.removeCallbacks(drawRunner);
Người giữ SurfaceHolder = getSurfaceHolder();
Canvas canvas = null;
thử {
canvas = chủ.lockCanvas();
nếu (canvas != null) {
canvas.save();
canvas.drawColor(Color.BLACK);
for (Phần tử DrawElement : phần tử) {
element.drawFrame(canvas);
}
canvas.restore();
}
} finally {
nếu (canvas != null)
chủ.unlockCanvasAndPost(canvas);
}
nếu (hiển thị) {
handler.postDelayed(drawRunner, 1);
}
}

Tôi đã thử sử dụng nó với Chế độ xem bình thường, đó là onDraw và nó hoạt động tốt ở đó. Nó rất trơn tru. Bây giờ tôi đang tự hỏi làm thế nào để cải thiện hiệu suất. Tôi cũng đã thử các delayMillis khác nhau nhưng hiệu suất không được cải thiện.

Tôi cũng đã nghe nói về GLWallapersService, nhưng việc vẽ một Bitmap đơn giản có vẻ phức tạp. Vì vậy tôi muốn sử dụng Canvas thay thế.

Cảm ơn

biên tập:

Tôi đã kiểm tra hiệu suất giữa Chế độ xem và Dịch vụ. Phần này:

  bắt đầu dài = System.currentTimeMillis();
for (Phần tử DrawElement : phần tử) {
element.drawFrame(canvas);
}
Log.e("drawTime", Long.toString(System.currentTimeMillis()-start));

Nhập Chế độ xem trong vòng 0-1 mili giây và nhập Dịch vụ trong khoảng từ 50 đến 300 mili giây.

câu trả lời hay nhất

Hiệu suất thực sự phụ thuộc vào kích thước bitmap của bạn, cách bạn phân bổ và giải phóng chúng, cấu hình bitmap nào bạn sử dụng và API bạn đang chạy ứng dụng của mình.

  1. Hãy nhớ rằng bitmap lớn rất tốn CPU và tiêu tốn nhiều RAM. Cố gắng sử dụng kích thước chính xác cần thiết cho mật độ và độ phân giải màn hình hiện tại của bạn. Tránh phân bổ kích thước vô dụng không được nhận dạng do giới hạn màn hình thiết bị.
  2. Nếu có thể, hãy sử dụng lại bitmap của bạn. Việc phân bổ và giải phóng bộ nhớ cho mỗi bitmap mới thực sự là một công việc nặng nhọc. Nếu bạn sử dụng lại bitmap, bạn có thể đạt được hiệu suất vượt trội.
  3. Cố gắng sử dụng cấu hình thấp nhất có thể cho ảnh bitmap của bạn. Tất nhiên, trong trường hợp một số ảnh, cần phải giữ nguyên tất cả các dải màu của chúng, nhưng ngay cả trong trường hợp này cũng có những cấu hình cho phép bạn giảm mức tiêu thụ bộ nhớ xuống hai lần mà chất lượng hầu như không bị giảm đáng kể.
  4. Trong một số phiên bản Android đầu tiên, đã xảy ra sự cố lớn với bitmap do cách triển khai cụ thể của Dalvik. Không còn nghi ngờ gì nữa, ứng dụng của bạn sẽ chạy tốt hơn trên 24+ API. Tôi không nói rằng bạn nên tăng phiên bản SDK được hỗ trợ tối thiểu, nhưng có lẽ bạn nên kiểm tra xem nó hoạt động như thế nào trên tất cả phạm vi API được hỗ trợ.

Hãy xem những điều hữu ích này:

https://developer.android.com/topic/performance/graphics/ https://developer.android.com/topic/performance/graphics/manage-memory https://developer.android.com/topic/performance/graphics/cache-bitmap

Về hiệu suất vẽ hình ảnh của android - WallpaperService, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/53051350/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress