Как я могу проверить, есть ли у устройства Android возможности аппаратного ускорения?

Я работаю над приложением для Android, и оно дает сбой на определенном устройстве x86 (API 21), чего не происходит после отключения аппаратного ускорения. После небольшого исследования я обнаружил, что устройства Android x86 имеют возможности аппаратного ускорения только в более новых версиях.

Есть ли способ программно проверить в приложении для Android, поддерживает ли устройство аппаратное ускорение или нет?

Редактировать 2:

Например, когда вы вводите chrome: // gpu в браузере Chrome и получаете статус графической функции, такой как Canvas, который я получаю только для этого устройства, как я могу получить это в своем коде Android?

Редактировать 1:

Журналы сбоев при попытке открыть youtube.com в примере приложения на этом устройстве x86 (Dell Venue 8 7840 API 21) с включенным аппаратным ускорением:

W/ActivityManager: Exception thrown during pause
W/ActivityManager: android.os.TransactionTooLargeException
W/ActivityManager:     at android.os.BinderProxy.transactNative(Native Method)
W/ActivityManager:     at android.os.BinderProxy.transact(Binder.java:496)
W/ActivityManager:     at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:704)
W/ActivityManager:     at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:825)
W/ActivityManager:     at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:2726)
W/ActivityManager:     at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:2583)
W/ActivityManager:     at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:2537)
W/ActivityManager:     at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:11680)
W/ActivityManager:     at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:11577)
W/ActivityManager:     at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:12261)
W/ActivityManager:     at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:11772)
W/ActivityManager:     at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)

person Sanket Garg    schedule 05.05.2016    source источник


Ответы (2)


Аппаратное ускорение включено по умолчанию, если ваш целевой уровень API >=14, но его также можно включить явно. Поддержка аппаратного ускорения началась с API 11.

Есть два разных способа проверить, является ли приложение аппаратным ускорением:

  • View.isHardwareAccelerated() возвращает true, если View подключен к окну с аппаратным ускорением.
  • Canvas.isHardwareAccelerated() возвращает true, если Canvas имеет аппаратное ускорение

Если вам необходимо проверить это в коде чертежа, по возможности используйте Canvas.isHardwareAccelerated() вместо View.isHardwareAccelerated().

person Fiil    schedule 05.05.2016
comment
Я говорю не о включении и отключении аппаратного ускорения, а о самой поддержке аппаратного ускорения. - person Sanket Garg; 05.05.2016
comment
Рискну сказать, что каждое устройство с API 11+ имеет поддержку аппаратного ускорения. - person Fiil; 05.05.2016
comment
У меня есть устройство с API 21 и, кажется, не поддерживает аппаратное ускорение, возможно, это не так для архитектуры x86. - person Sanket Garg; 05.05.2016

Довольно просто

<application android:hardwareAccelerated="true" ...>
person DaX    schedule 05.05.2016
comment
Я говорю не о включении и отключении аппаратного ускорения, а о самой поддержке аппаратного ускорения. - person Sanket Garg; 05.05.2016
comment
Если вы можете включить его без ошибок, значит, он его поддерживает. - person DaX; 05.05.2016
comment
Но он падает всякий раз, когда я пытаюсь выполнить какую-либо работу с графикой, например, открыть youtube.com в веб-просмотре, журналы сбоев указывают на собственный код. - person Sanket Garg; 05.05.2016