2013-03-03 19 views
9

Tuval üzerinde çok fazla çizim gerektiren bir uygulama yapıyorum. Uygulamanın yüksek çözünürlüğe sahip cihazlarda biraz yavaş olduğunu fark ettim (örneğin nexus 7). Geliştirici seçeneğinde bir Force GPU seçeneği olduğunu gördüm. GPU'nun Güçlendirilmesi etkinleştirildiğinde, uygulamam kesinlikle düzgün çalışır.Android Force GPU Oluşturma Nasıl etkinleştirilir ve devre dışı bırakılır?

Bu Force GPU seçeneğinin Hardware Acceleration (Donanım Hızlandırması) olarak adlandırıldığını ve yalnızca Android 3.0 ve üstü için mevcut olduğunu okudum.

Uygulamam Android 2.3 ve üstünü hedefliyor.

Herhangi bir Android 3.0 veya üzeri aygıtta Donanım Hızlandırmalı (veya sihirbaz ne olursa olsun GPU'yu zorla) program aracılığıyla etkinleştirmek mümkün mü? gibi

şey: Size farz

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 

} 
+0

Karışıklık için özür dilerim, android 2.3 api 10'da uygulamamı yapıyorum. gerçekten veya getWindow(). setFlags ( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); – xiaowoo

+0

OnCreate'ınıza bastırmayı eklediniz mi? – wtsang02

+0

Lütfen oluşturma hedefinizi API Düzey 11 veya daha yüksek bir değere ayarlayın, ardından 'android: hardwareAccelerated = "true" 'komutunu kullanın. – CommonsWare

cevap

6

zaten android ekledik: En Manifest dosyasına hardwareAccelerated? the guide on hardware acceleration başına uygulama içinde donanım hızlandırma sağlayan ve GPU zorlayarak bir sistem düzeyinde ne yaptığını tam olarak yapması gereken şey budur

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

.

+0

benim app android 2 kullanır.3 api 10, onun android yok: hardwareAccelerated, yani "android 'paketinde' hardwareAccelerated 'özniteliği için hiçbir kaynak tanımlayıcısı bulunamadı" hakkında şikayet " – xiaowoo

+1

Farklı API seviyelerini oluşturabilir ve hedefleyebilirsiniz. API 11 + 'a karşı kurun ve minimum SDK'nızı 10. – ianhanniballake

+0

ianhanniballake'de saklayın, en son api'yi (11) kullanarak uygulamamı kurabildiğimi ve daha düşük api aygıtlarında çalışmaya devam edebileceğimi mi söylüyorsunuz? Bu benim android proje hedefimi en son api'ye yükseltmem gerektiği anlamına mı geliyor? – xiaowoo

3

Seti minSdkVersion'ın altında

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

gibi maksimum

10'a kadar ve targetSdkVersion sonra

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

Şimdi

Ve özelliklerinden

0 için çalışacaktır

veya

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

daha düşük API seviyesini kullanarak uygulama oluşturmak istiyorsanız yansıma yoluyla yöntemi erişebilirsiniz:

LAYER_TYPE_X aranan katman tipine ait sabit tamsayı değeridir
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_NONE = 0 
LAYER_TYPE_SOFTWARE = 1 
LAYER_TYPE_HARDWARE = 2 
İlgili konular