Android 墙纸服务图像绘制性能
我正在为Android制作livewallpaper。代码可以工作,但我有性能问题。基本上,我绘制位图并移动它们。有15个小图像,效果很好。但是有了50张更大的图片,它就开始落后了 在我的移动对象中,我在Constructor中创建位图,并按如下方式显示:Android 墙纸服务图像绘制性能,android,android-canvas,live-wallpaper,Android,Android Canvas,Live Wallpaper,我正在为Android制作livewallpaper。代码可以工作,但我有性能问题。基本上,我绘制位图并移动它们。有15个小图像,效果很好。但是有了50张更大的图片,它就开始落后了 在我的移动对象中,我在Constructor中创建位图,并按如下方式显示: public void drawFrame(Canvas canvas) { Position p = movingStrategy.move(); Matrix matrix = new Matrix(); matr
public void drawFrame(Canvas canvas) {
Position p = movingStrategy.move();
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
matrix.postRotate(p.getRotation());
matrix.postTranslate(p.getPositionX(), p.getPositionY());
canvas.drawBitmap(bitmap, matrix, paint);
}
在我的壁纸服务中,我这样称呼onDraw:
private void draw() {
handler.removeCallbacks(drawRunner);
SurfaceHolder holder = getSurfaceHolder();
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
if (canvas != null) {
canvas.save();
canvas.drawColor(Color.BLACK);
for (DrawElement element : elements) {
element.drawFrame(canvas);
}
canvas.restore();
}
} finally {
if (canvas != null)
holder.unlockCanvasAndPost(canvas);
}
if (visible) {
handler.postDelayed(drawRunner, 1);
}
}
我试着用一个普通的视图来使用它,它是onDraw,在那里它工作得很好。它很光滑。现在,我在问自己如何提高绩效。我还尝试了不同的延迟毫秒,但性能没有提高
我也听说过GLP服务,但绘制简单的位图似乎非常复杂。所以我想用画布来代替
多谢各位
编辑:
我已经测试了视图和服务之间的性能。本部分:
long start = System.currentTimeMillis();
for (DrawElement element : elements) {
element.drawFrame(canvas);
}
Log.e("DrawingTime", Long.toString(System.currentTimeMillis()-start));
在0-1ms范围内观看,在50-300ms范围内观看服务。性能实际上取决于位图的大小、分配和取消分配的方式、使用的位图配置以及运行应用程序的API
您应该使用压缩纹理来制作唾液!IE:etc1和etc2
使用png或jpeg可以工作,但它们使用cpu性能快速处理和耗尽电池。Hi Wulle。欢迎来到StackOverflow。像这样的简短回答应该作为评论。请参阅这些提示,了解答案的预期内容。亲切的问候。