android 備忘録2

ここ最近のアプリバージョンアップ作業中にわかったことを記録しておきます。


・仮想フレームバッファの更新(結局以前の処理のまま保留)
 java側で確保したバッファ(RGB565)にNDK側で描画しているが、これまで受け渡しをGetShortArrayElementsでやっていた。

void ネイティブ関数(JNIEnv* env, jobject  th, jshortArray vArray)
{
    jshort *canvas = env->GetShortArrayElements(vArray, NULL);
    <なんらか描画処理>
    env->ReleaseShortArrayElements(vArray, canvas, 0);
}

しかしGetPrimitiveArrayCriticalの方が速いという話も聞いたのでやってみた。

void ネイティブ関数(JNIEnv* env, jobject  th, jshortArray vArray)
{
    jshort *const canvas = (jshort*)env->GetPrimitiveArrayCritical(vArray, NULL);
    <なんらか描画処理>
    env->ReleasePrimitiveArrayCritical(vArray, canvas, NULL);
}

実機では動いたけど、なぜかエミュレータでは動かなかったので結局GetShortArrayElementsのまま保留中。

・行列のかけ方
 Matrixのリファレンスどおりだけど、preConcat,postConcatでかける順序を変えられるらしい。
 その他のpre/postメソッドも同様らしい。

・Bitmapメモリが足りなくなったとき
 Bitmap#createBitmapを繰り返し実行するとメモリが無くなった。
 これもリファレンスどおりだけどBitmap#recycleしたあとにcreateすれば問題なかった。

    private static Bitmap sBitmap;
    <なんらか処理>
    sBitmap.recycle();
    sBitmap= Bitmap.createBitmap(幅, 高さ, Bitmap.Config.RGB_565);

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.