如何检查Android设备是否具有硬件加速功能?

时间:2016-05-05 09:27:29

标签: android android-canvas gpu hardware-acceleration android-x86

我正在开发Android应用程序,它在某个x86设备(API 21)上崩溃,这在关闭硬件加速后没有发生。经过一番研究后,我发现x86安卓设备只在较新版本中具有硬件加速功能。

如果设备支持硬件加速,有没有办法在Android应用程序中以编程方式检查?

编辑2:

就像当你在Chrome浏览器中键入chrome:// gpu并获得像Canvas这样的图形功能状态时,我只能为这个设备获取软件,我怎么能在我的android代码中得到它?

编辑1:

当我尝试在此x86设备(Dell Venue 8 7840 API 21)上的示例应用程序上打开youtube.com并且硬件加速时,崩溃日志:

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)

2 个答案:

答案 0 :(得分:2)

如果您的目标API级别>> = 14,则默认情况下会启用硬件加速,但也可以明确启用。 API 11开始支持硬件加速。

有两种不同的方法可以检查应用程序是否是硬件加速的:

    如果View.isHardwareAccelerated()附加到硬件加速窗口,
  • View将返回true。
  • 如果Canvas.isHardwareAccelerated()是硬件加速,则
  • Canvas会返回true

如果您必须在绘图代码中进行检查,请尽可能使用Canvas.isHardwareAccelerated()代替View.isHardwareAccelerated()

答案 1 :(得分:-2)

很简单

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