私は一晩中アンドロイドのパフォーマンスで戦ってきましたが、おそらく私が扱ってきた問題を解決しましたが、私はまだ非常に混乱しています。これらの2つのサンプルのタイミングの違いを考慮してください。Android drawBitmap 5倍のパフォーマンスの違い
描画可能ビットマップの最初のサンプル負荷と第二のサンプルは、元のブランクイメージをコピーせずに、新しいビットマップを作成
Bitmap cacheBitmap;
Canvas cacheCanvas;
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (cacheBitmap != null) {
cacheBitmap.recycle();
}
Resources res = getContext().getResources();
Bitmap blankImage = BitmapFactory.decodeResource(res, R.drawable.blank);
/* copy existing bitmap */
cacheBitmap = Bitmap.createScaledBitmap(blankImage, w, h, false);
/* copy existing bitmap */
cacheCanvas = new Canvas();
cacheCanvas.setBitmap(cacheBitmap);
cacheCanvas.drawRGB(255, 255, 255);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(cacheBitmap, 0, 0, null); // draws in 7-8 ms
}
その変更可能なコピーを作成します。
Bitmap cacheBitmap;
Canvas cacheCanvas;
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (cacheBitmap != null) {
cacheBitmap.recycle();
}
Resources res = getContext().getResources();
Bitmap blankImage = BitmapFactory.decodeResource(res, R.drawable.blank);
/* create fresh bitmap */
cacheBitmap = Bitmap.createBitmap(w, h, blankImage.getConfig());
/* create fresh bitmap */
cacheCanvas = new Canvas();
cacheCanvas.setBitmap(cacheBitmap);
cacheCanvas.drawRGB(255, 255, 255);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(cacheBitmap, 0, 0, null); // draws in 40 ms
}
第1のサンプルは、第2のサンプルより5~6倍速く描画されますが、これはなぜですか?私はブランクイメージに依存しない何らかの方法でこのコードを書くことができるようにしたいと思いますが、私が何をしても、最初にコピーできるようにすることなく低速のビットマップ描画で終わります。
事は、私が cacheBitmap = Bitmap.createBitmap(Bitmap.Config.RGB_565、w、h)を呼び出すときに、ある私のドローコールが30ミリ秒を取ると、私は cacheBitmap = Bitmap.createBitmap(W、H、ビットマップを使用する場合。 Config.ARGB_8888)私のドローコールは40ミリ秒かかるので、それだけではありません。 – seanalltogether
それは機能でした:) –
@Romain:私は知っています:)私はそのバグを綿密に追跡しました。私がGoogle+であなたをフォローして以来、あなたはAndroidについて話していると聞いて面白いですが、一日中世界中を旅して写真を撮っているような感じです:) – EboMike