11

キャンバスに多くの描画を必要とするアプリを構築しています。高解像度のデバイス (nexus 7 など) では、アプリの動作が少し遅くなることに気付きました。開発者向けオプションに Force GPU オプションがあるのを見ました。Force GPU を有効にすると、アプリは非常にスムーズに実行されます。

この強制 GPU オプションはハードウェア アクセラレーションと呼ばれ、Android 3.0 以降でのみ使用できることを読みました。

私のアプリは Android 2.3 以降を対象としています。

Android 3.0 以降のデバイスでハードウェア アクセラレーション (または GPU の強制) をプログラムで有効にすることはできますか?

何かのようなもの:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){

    Turn On Hardware Accelerate HERE but How can i do this?
    any code snippet would be welcome/helpful/thanks

}
4

3 に答える 3

7

マニフェスト ファイルに android:hardwareAccelerated を既に追加していると思いますか?

<application android:hardwareAccelerated="true" ...>

これは、ハードウェア アクセラレーションに関するガイドに従って、アプリケーション内でハードウェア アクセラレーションを有効にするものであり、システム レベルで GPU を強制するのとまったく同じことを行う必要があります。

于 2013-03-03T20:59:20.803 に答える
4

minSdkVersion を 10 に設定し、targetSdkVersion を最大に設定します

以下のように

 <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="17" />

それから

<application android:hardwareAccelerated="true" ...>

今すぐ動作します

そして、特殊性のために

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){
     view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}

また

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){
     view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
于 2013-03-22T09:17:37.473 に答える
0

下位の API レベルを使用してアプリケーションをビルドする場合は、リフレクションを介してメソッドにアクセスできます。

    try {
        Method setLayerType = view.getClass().getMethod(
                "setLayerType", new Class[] { int.class, Paint.class });
        if (setLayerType != null)
            setLayerType.invoke(view, new Object[] { LAYER_TYPE_X, null });
    } catch (NoSuchMethodException e) {
    } catch (IllegalArgumentException e) {
    } catch (IllegalAccessException e) {
    } catch (InvocationTargetException e) {
    }

LAYER_TYPE_X は、必要なレイヤー タイプの定数整数値です。

LAYER_TYPE_NONE = 0
LAYER_TYPE_SOFTWARE = 1
LAYER_TYPE_HARDWARE = 2
于 2013-12-04T19:04:30.233 に答える