我正在开发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)
答案 0 :(得分:2)
如果您的目标API级别>> = 14,则默认情况下会启用硬件加速,但也可以明确启用。 API 11开始支持硬件加速。
有两种不同的方法可以检查应用程序是否是硬件加速的:
View.isHardwareAccelerated()
附加到硬件加速窗口,View
将返回true。Canvas.isHardwareAccelerated()
是硬件加速,则Canvas
会返回true
如果您必须在绘图代码中进行检查,请尽可能使用Canvas.isHardwareAccelerated()
代替View.isHardwareAccelerated()
。
答案 1 :(得分:-2)
很简单
<application android:hardwareAccelerated="true" ...>