Updated 29 January 2021
Hardware acceleration is the process to use device hardware to speedup drawing operations of android application. In other word, android use hardware acceleration to speed up 2D rendering or fast up the image and video rendering.
It is by default enabled if your Target API level is >=14. You can also enable and disable it according to requirements. Application can deliver faster and smoother animations if you have enable it. It directly effects the rendering and scrolling behaviour of views. As all 2D drawing Operation are not supported by hardware acceleration, it might be effect some of your custom views.
We can enable hardware acceleration at application level by adding “android : hardwareAccelerated” attribute to application tag.
1 |
<application android : hardwareAccelerated="true" ...> |
Similarly, we can enable or disable hardware acceleration at Activity level by using same attribute as we are using for application level.
1 |
<activity android:hardwareAccelerated="true" .../> |
If you are facing issue in any activity by enabling hardware acceleration globally, you disable it only for that activity.
1 2 3 4 5 6 |
<application android :hardwareAccelerated="true"..> // enable at application level <activity ... /> <activity android : hardwareAccelerated="false" /> //disable for particular activity <activity ... /> </application> |
If you want hardware acceleration window only, then you can done this by using “FLAG_HARDWARE_ACCELERATED” flag.
1 2 3 4 |
window.setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED ) |
At window level you can only enable the hardware acceleration but currently you can’t disable it.
At View Level we can only disable hardware acceleration by setting layer type to software of any view.
1 |
splashImage.setLayerType(View.LAYER_TYPE_SOFTWARE, null) |
If you have disabled hardware acceleration in your app then “LAYER_TYPE_HARDWARE” layer type behaves same as “LAYER_TYPE_SOFTWARE”.
A Common crash which you may face if you have enable hardware acceleration in you app and using large image.
1 2 |
java.lang.RuntimeException: Canvas: trying to draw too large(157286400bytes) bitmap. at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229) |
Sometimes you may face this issue on splash screen when you are using large size of splash screen (ex: 1280*1920 ) on some device like Samsung galaxy s7 or any Hawaii devices.
1. Disable hardware acceleration. You can disable Hardware acceleration at any level, but try to disable it only for image splash image(view level)
1 2 |
Image splashImage= view.findViewbyId(R.id.splash_image) splashImage.setLayerType(View.LAYER_TYPE_SOFTWARE, null) |
2. You can also reduce/decrease the size of image.
3. Don’t put your splash image directly into draw-able folder. Put your image into folder according to resolution like.. drawable-xxdpi.
1. View.isHardwareAccelerated() returns true if the View is attached to a hardware accelerated window.
2. Canvas.isHardwareAccelerated() returns true if the Canvas is hardware accelerated
To get more info please visit developer official site : https://developer.android.com/guide/topics/graphics/hardware-accel
In this blog we learn importance of hardware acceleration in android and how it will effects our apps.
If you have more details or questions, you can reply to the received confirmation email.
Back to Home
Be the first to comment.