2013-03-03 37 views
9

Tôi đang xây dựng một ứng dụng yêu cầu nhiều bản vẽ trên canvas. Tôi nhận thấy rằng ứng dụng hơi lag trong các thiết bị có độ phân giải cao (ví dụ nexus 7). Tôi thấy có một tùy chọn Force GPU trong tùy chọn nhà phát triển. Khi Force GPU được bật, ứng dụng của tôi chạy hoàn toàn trơn tru.Hiển thị GPU Android Force Làm cách nào để bật và tắt?

Tôi đã đọc rằng tùy chọn Force GPU này được gọi là Tăng tốc phần cứng và nó chỉ khả dụng cho Android 3.0 trở lên.

Ứng dụng của tôi đang nhắm mục tiêu Android 2.3 trở lên.

Có thể lập trình kích hoạt phần cứng tăng tốc (hoặc Force GPU - bất kỳ phép thuật nào được gọi) trên bất kỳ thiết bị Android 3.0 trở lên nào không?

Cái gì như:

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

Xin lỗi vì sự nhầm lẫn, tôi đang xây dựng ứng dụng của tôi trên Android 2.3 api 10, vì vậy nó không thực sự có hoặc getWindow(). setFlags ( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); – xiaowoo

+0

Bạn có thêm tính năng đàn áp vào onCreate của mình không? – wtsang02

+0

Vui lòng đặt mục tiêu xây dựng của bạn thành API cấp 11 trở lên, sau đó sử dụng 'android: hardwareAccelerated =" true "'. – CommonsWare

Trả lời

6

tôi giả sử bạn đã thêm android: hardwareAccelerated đến tập tin Manifest của bạn?

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

Đó là những gì cho phép tăng tốc phần cứng trong ứng dụng của bạn theo số the guide on hardware acceleration và phải làm chính xác những gì buộc GPU ở mức hệ thống.

+0

ứng dụng của tôi sử dụng Android 2.3 api 10, nó không có android: hardwareAccelerated, do đó, nó phàn nàn về "Không tìm thấy mã định danh tài nguyên cho thuộc tính 'hardwareAccelerated' trong gói 'android'" – xiaowoo

+1

Bạn có thể tạo và nhắm mục tiêu các cấp API khác nhau. Xây dựng dựa trên API 11+ và giữ SDK tối thiểu của bạn tại 10. – ianhanniballake

+0

ianhanniballake, bạn đang nói rằng tôi có thể tạo ứng dụng của mình bằng api mới nhất (11) và làm cho ứng dụng vẫn chạy trong các thiết bị api thấp hơn? Điều này có nghĩa là tôi chỉ cần nâng cấp mục tiêu dự án Android của tôi lên api mới nhất? – xiaowoo

3

Set minSdkVersion đến 10 và targetSdkVersion để tối đa

Giống như dưới đây

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

sau đó

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

Bây giờ sẽ làm việc

Và đối với đặc thù

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

hoặc

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

Nếu bạn muốn xây dựng ứng dụng của bạn sử dụng mức api thấp hơn bạn có thể truy cập vào phương pháp này thông qua phản ánh:

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) { 
    } 

đâu LAYER_TYPE_X là giá trị hằng số nguyên kiểu lớp truy nã:

LAYER_TYPE_NONE = 0 
LAYER_TYPE_SOFTWARE = 1 
LAYER_TYPE_HARDWARE = 2