Tôi đã bật tăng tốc phần cứng trong ứng dụng của mình nhưng tôi đã vô hiệu hóa nó vì một trong các quan điểm của tôi vì tôi gặp vấn đề với mũ đột quỵ và những thứ khác.UnsupportedOperationException trong GLES20Canvas.clipPath với khả năng tăng tốc phần cứng bị vô hiệu hóa trên màn hình
Bây giờ tôi nhận được đống này dấu vết trong Google Play Sụp đổ lỗi giao diện điều khiển:
java.lang.UnsupportedOperationException
at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:287)
at com.myapp.MyCustomView.onDraw(SourceFile:288)
at android.view.View.draw(View.java:9310)
at android.view.View.getDisplayList(View.java:8773)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2298)
...
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:609)
at android.view.ViewRoot.draw(ViewRoot.java:1634)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1450)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2094)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
...
tôi đã xác định android:hardwareAccelerated="true"
trong AndroidManifest.xml. Nhưng tôi đặc biệt tàn tật tăng tốc phần cứng trong constructor của giao diện tùy chỉnh của tôi:
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// ... code omitted
// disable acceleration because Paint.setStrokeCap(Cap.ROUND) is not working otherwise
Compatibility.disableHardwareAcceleration(this);
}
Với khả năng tương thích được điều này:
public class Compatibility {
// View.setLayerType() was introduced in Honeycomb
private static Method setLayerTypeMethod = getMethod(View.class, "setLayerType", int.class,
Paint.class);
private static Method getMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
try {
return clazz.getMethod(name, parameterTypes);
}
catch (NoSuchMethodException e) {
return null;
}
}
private Compatibility() {
}
public static void disableHardwareAcceleration(View view) {
try {
if (setLayerTypeMethod != null) {
int layerType = 1; // View.LAYER_TYPE_SOFTWARE
setLayerTypeMethod.invoke(view, layerType, null);
}
}
catch (Exception ignored) {
}
}
}
Thật không may là lỗi sụp đổ console không tiết lộ thông tin về phiên bản hệ điều hành Android hoặc thiết bị.
Bất kỳ ý tưởng nào có thể xảy ra?