SlideShare une entreprise Scribd logo
1  sur  98
Télécharger pour lire hors ligne
Bitmap management
like a boss!
Somkiat Khitwongwattana
What is Bitmap?
The class represent
a bitmap image.
imageView.setImageResource(R.drawable.image_rocket)
Bitmap
Image

File
UI
Decode Render
Bitmap
Image

File
UI
Decode Render
CPU
Bitmap
Image

File
UI
Decode Render
GPU
Why should we care about Bitmap?
• Make the app more beautiful
• Everywhere in the app
• Consume a lot of memory
• Main causes of the OOM error
Memory Consumption
Heap
Heap
Bitmap
Heap
Bitmap
Heap
Bitmap
Heap
Bitmap
Bitmap
Heap
Bitmap
GC
Bitmap
Heap
Bitmap
Bitmap
Heap
Bitmap
Bitmap
Heap
Bitmap Bitmap
Bitmap
Heap
Bitmap Bitmap
Out of memory
Drawable Resource
drawable
image_rocket.jpg
800 x 800 pixels
XXXHDPI
XXXHDPI
LDPI
MDPI
HDPI
XHDPI
XXHDPI
XXXHDPI
3
4
6
8
12
16
x0.75
x1
x1.5
x2
x3
x4
Scaling
Ratio
MultiplierDensity
XXXHDPI
LDPI
MDPI
HDPI
XHDPI
XXHDPI
XXXHDPI
3
4
6
8
12
16
x0.75
x1
x1.5
x2
x3
x4
Scaling
Ratio
MultiplierDensity
XXXHDPI
image_rocket.jpg
800 x 800
3,200 x 3,200 !!
drawable-ldpi
image_rocket.jpg
150 x 150 pixels
drawable-mdpi
image_rocket.jpg
200 x 200 pixels
drawable-hdpi
image_rocket.jpg
300 x 300 pixels
drawable-xhdpi
image_rocket.jpg
400 x 400 pixels
drawable-xxhdpi
image_rocket.jpg
600 x 600 pixels
drawable-xxxhdpi
image_rocket.jpg
800 x 800 pixels
The image will not be scaled by dpi
drawable-nodpi
image_rocket.jpg
800 x 800 pixels
LDPI
MDPI
HDPI
XHDPI
XXHDPI
XXXHDPI
120dpi
160dpi
240dpi
320dpi
480dpi
640dpi
140dpi
180dpi
200dpi
220dpi
260dpi
280dpi
300dpi
29
29
29
29
25
22
25
340dpi
360dpi
400dpi
420dpi
440dpi
560dpi
600dpi
25
23
19
23
28
21
29
Density API Level Density API Level
140dpi
180dpi
200dpi
220dpi
260dpi
280dpi
300dpi
mdpi
hdpi
hdpi
hdpi
xhdpi
xhdpi
xhdpi
340dpi
360dpi
400dpi
420dpi
440dpi
560dpi
600dpi
xxhdpi
xxhdpi
xxhdpi
xxhdpi
xxhdpi
xxxhdpi
xxxhdpi
Density Reference Density Reference
140dpi
180dpi
200dpi
220dpi
260dpi
280dpi
300dpi
x0.875
x1.125
x1.25
x1.375
x1.625
x1.75
x1.875
340dpi
360dpi
400dpi
420dpi
440dpi
560dpi
600dpi
x2.125
x2.25
x2.5
x2.625
x2.75
x3.5
x3.75
Density
Medium
Multiplier Density
Medium
Multiplier
140dpi
180dpi
200dpi
220dpi
260dpi
280dpi
300dpi
x0.875
x0.75
x0.8333
x0.916
x0.8125
x0.875
x0.9375
340dpi
360dpi
400dpi
420dpi
440dpi
560dpi
600dpi
x0.7083
x0.75
x0.8333
x0.875
x0.9166
x0.875
x0.9375
Density
Reference
Multiplier Density
Reference
Multiplier
420dpi
drawable-xhdpi
image_rocket.jpg
400 x 400 pixels
drawable-xxhdpi
image_rocket.jpg
600 x 600 pixels
drawable-xxxhdpi
image_rocket.jpg
800 x 800 pixels
420dpi
drawable-xhdpi
image_rocket.jpg
400 x 400 pixels
drawable-xxhdpi
image_rocket.jpg
600 x 600 pixels
drawable-xxxhdpi
image_rocket.jpg
800 x 800 pixels
420dpi
420dpi drawable-xxhdpi
image_rocket.jpg
600 x 600 pixels
525 x 525 pixels
x0.875
Pixel Format
in Bitmap
ALPHA_8
Only alpha value, no color information
Bitmap.Config.ALPHA_8
1 pixel required 1 byte
ARGB_4444
4-bit RGB with alpha, low quality
Bitmap.Config.ARGB_4444
1 pixel required 2 bytes
RGB_565
5-bit for blue and red and 6-bit for green
without alpha, common use for do not require
high color fidelity
Bitmap.Config.RGB_565
1 pixel required 2 bytes
ARGB_8888
8-bit RGB with alpha, common use for the
quality
Bitmap.Config.ARGB_8888
1 pixel required 4 bytes
RGBA_F16
16-bit RGB with alpha, wide-gamut and HDR
content
Bitmap.Config.RGB_F16
1 pixel required 8 bytes
HARDWARE
Store the values in graphic memory, to draw
the bitmap on a screen only
Bitmap.Config.HARDWARE
ALPHA_8
ARGB_4444

RGB_565
ARGB_8888

RGBA_F16
HARDWARE
1
2
2
4
8
-
1
1
1
1
26
26
Byte Per Pixel API LevelFormat
ALPHA_8
ARGB_4444

RGB_565
ARGB_8888

RGBA_F16
HARDWARE
Format
Alpha value only
Poor quality
Common use
Common use

Wide-gamut and HDR content
Store in Graphic Memory only
Description
Why 6-bit green in RGB_565?
5-bit red
6-bit green
5-bit blue
Why 6-bit green in RGB_565?
Human eye is more sensitive to
gradations of green than blue and red
(actually yellowish-green)
100px
100px
Total
100 x 100 = 10,000 px
100px
100px
ARGB_8888
10,000 x 4 = 40 KB
RGB_565
10,000 x 2= 20 KB
4,048 x 3,036 px
~12MP
4,048 x 3,036 px
~12MP
ARGB_8888
~48MB
RGB_565
~24MB
Transparency Image
ARGB_8888
Opaque Image
RGB_565 balance quality & memory
ARGB_8888 best for quality
ARGB_8888
ALPHA_8 Tint
Memory Usage
100%
Memory Usage
25%
Efficiently Decoding
BitmapFactory.decodeResource(...)
BitmapFactory.decodeResourceStream(...)
BitmapFactory.decodeFile(...)
BitmapFactory.decodeFileDescriptor(...)
BitmapFactory.decodeStream(...)
BitmapFactory.decodeByteArray(...)
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inSampleSize = 2
}
val resId = R.drawable.lovely_cat
val bitmap = BitmapFactory.decodeResource(resources, resId, options)
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inSampleSize = 2
}
val resId = R.drawable.lovely_cat
val bitmap = BitmapFactory.decodeResource(resources, resId, options)
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inSampleSize = 2
}
val resId = R.drawable.lovely_cat
val bitmap = BitmapFactory.decodeResource(resources, resId, options)
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inSampleSize = 2
}
val resId = R.drawable.lovely_cat
val bitmap = BitmapFactory.decodeResource(resources, resId, options)
Full Size
1/2 Size
1/4 Size
inSampleSize=1 inSampleSize=2 inSampleSize=4
1st Pixel
inSampleSize
Calculate inSampleSize
private fun calculateInSampleSize(
outHeight: Int, outWidth: Int, reqWidth: Int, reqHeight: Int
): Int {
var inSampleSize = 1
if (outHeight > reqHeight || outWidth > reqWidth) {
val halfHeight: Int = outHeight / 2
val halfWidth: Int = outWidth / 2
while (halfHeight / inSampleSize >= reqHeight &&
halfWidth / inSampleSize >= reqWidth
) {
inSampleSize *= 2
}
}
return inSampleSize
}
Calculate inSampleSize
private fun calculateInSampleSize(
outHeight: Int, outWidth: Int, reqWidth: Int, reqHeight: Int
): Int {
var inSampleSize = 1
if (outHeight > reqHeight || outWidth > reqWidth) {
val halfHeight: Int = outHeight / 2
val halfWidth: Int = outWidth / 2
while (halfHeight / inSampleSize >= reqHeight &&
halfWidth / inSampleSize >= reqWidth
) {
inSampleSize *= 2
}
}
return inSampleSize
}
Decode Bitmap
private fun decodeBitmapFromResource(
resources: Resources, resId: Int
): Bitmap {
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inMutable = true
inJustDecodeBounds = true
BitmapFactory.decodeResource(resources, resId, this)
inJustDecodeBounds = false
inSampleSize = calculateInSampleSize(
outWidth, outHeight, imageView.width, imageView.height
)
}
return BitmapFactory.decodeResource(resources, resId, options)
}
Decode Bitmap
private fun decodeBitmapFromResource(
resources: Resources, resId: Int
): Bitmap {
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inMutable = true
inJustDecodeBounds = true
BitmapFactory.decodeResource(resources, resId, this)
inJustDecodeBounds = false
inSampleSize = calculateInSampleSize(
outWidth, outHeight, imageView.width, imageView.height
)
}
return BitmapFactory.decodeResource(resources, resId, options)
}
Decode Bitmap
private fun decodeBitmapFromResource(
resources: Resources, resId: Int
): Bitmap {
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inMutable = true
inJustDecodeBounds = true
BitmapFactory.decodeResource(resources, resId, this)
inJustDecodeBounds = false
inSampleSize = calculateInSampleSize(
outWidth, outHeight, imageView.width, imageView.height
)
}
return BitmapFactory.decodeResource(resources, resId, options)
}
~1ms
Decode Bitmap
private fun decodeBitmapFromResource(
resources: Resources, resId: Int
): Bitmap {
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inMutable = true
inJustDecodeBounds = true
BitmapFactory.decodeResource(resources, resId, this)
inJustDecodeBounds = false
inSampleSize = calculateInSampleSize(
outWidth, outHeight, imageView.width, imageView.height
)
}
return BitmapFactory.decodeResource(resources, resId, options)
}
Decode Bitmap
private fun decodeBitmapFromResource(
resources: Resources, resId: Int
): Bitmap {
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inMutable = true
inJustDecodeBounds = true
BitmapFactory.decodeResource(resources, resId, this)
inJustDecodeBounds = false
inSampleSize = calculateInSampleSize(
outWidth, outHeight, imageView.width, imageView.height
)
}
return BitmapFactory.decodeResource(resources, resId, options)
}
Density
...
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inMutable = true
inJustDecodeBounds = true
BitmapFactory.decodeResource(resources, resId, this)
inJustDecodeBounds = false
inSampleSize = calculateInSampleSize(
outWidth, outHeight, imageView.width, imageView.height
)
inDensity = outWidth
inTargetDensity = imageView.width * inSampleSize
}
...
Density
...
val options = BitmapFactory.Options().apply {
inPreferredConfig = Bitmap.Config.RGB_565
inMutable = true
inJustDecodeBounds = true
BitmapFactory.decodeResource(resources, resId, this)
inJustDecodeBounds = false
inSampleSize = calculateInSampleSize(
outWidth, outHeight, imageView.width, imageView.height
)
inDensity = outWidth
inTargetDensity = imageView.width * inSampleSize
}
...
Filtering
inDensity & inTargetDensity
Full Size
1/2 Size
3/8 Size
inSampleSize inDensity
Bitmap is Parcelable
val bitmap = ...
val intent = Intent(this, ViewerActivity::class.java)
intent.putExtra("image", bitmap)
startActivity(intent)
TransactionTooLargeException
(larger than 1MB)
Do not put the Bitmap in Bundle
to passing to another component.
Save an image to internal
storage then send the path
to another component.
Internal Storage
Activity A Activity B
Bitmap
Internal Storage
Activity A Activity B
Bitmap
Internal Storage
Activity A Activity B
Bitmap
Path
Internal Storage
Activity A Activity B
Bitmap
Path
Internal Storage
Activity A Activity B
Bitmap
Path
Internal Storage
Activity A Activity B
Bitmap
Internal Storage
Activity A Activity B
Bitmap
val bitmap = ...
val outputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)
Bitmap JPEG
(100% Quality)
Compress
Bitmap JPEG
(100% Quality)
Compress
2MB 7KB
Size depend on image's detail
Base64 string
val bitmap = ...
val outputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)
val base64 = Base64.encodeToString(
outputStream.toByteArray(),
Base64.DEFAULT
)
• Base64 string 135% larger than byte array
• Compressed to JPEG or PNG before encoding
• Do not encode base64 from bitmap directly
Image Decoder
Next generation of bitmap decoding
val source = ImageDecoder.createSource(resources, resId)
val bitmap = ImageDecoder.decodeBitmap(source) { decoder, _, _ ->
run {
val width = imageView.measuredWidth
val height = imageView.measuredHeight
decoder.setTargetSize(width, height)
decoder.setPostProcessor { canvas: Canvas ->
...
}
}
}
imageView.setImageBitmap(bitmap)
ImageDecoder is available in
Android 9.0 Pie or higher version
ImageDecoder in AndroidX?
"We are planning a Support
Library for ImageDecoder"
Someone from Google Team
8 May 2018
https://issuetracker.google.com/issues/78041382
Hard to understand?
Don't worry, me too!
The god of image loading
and caching for Android
Thank you!
@akexorcist

Contenu connexe

Similaire à Bitmap management like a boss

Stupid Canvas Tricks
Stupid Canvas TricksStupid Canvas Tricks
Stupid Canvas Tricksdeanhudson
 
3 track kinect@Bicocca - sdk e camere
3   track kinect@Bicocca - sdk e camere3   track kinect@Bicocca - sdk e camere
3 track kinect@Bicocca - sdk e camereMatteo Valoriani
 
What is image in Swift?/はるふ
What is image in Swift?/はるふWhat is image in Swift?/はるふ
What is image in Swift?/はるふha1f Yamaguchi
 
Day 1 presentation terminology
Day 1 presentation   terminologyDay 1 presentation   terminology
Day 1 presentation terminologykelv_w
 
Kotlin Mullets
Kotlin MulletsKotlin Mullets
Kotlin MulletsJames Ward
 
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficientTh 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficientBin Shao
 
Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)Marakana Inc.
 
Introduction to Computer graphics
Introduction to Computer graphicsIntroduction to Computer graphics
Introduction to Computer graphicsLOKESH KUMAR
 
Random And Dynamic Images Using Python Cgi
Random And Dynamic Images Using Python CgiRandom And Dynamic Images Using Python Cgi
Random And Dynamic Images Using Python CgiAkramWaseem
 
Image Processing using Matlab . Useful for beginners to learn Image Processing
Image Processing using Matlab . Useful for beginners to learn Image ProcessingImage Processing using Matlab . Useful for beginners to learn Image Processing
Image Processing using Matlab . Useful for beginners to learn Image ProcessingAshok Kumar
 
Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.
Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.
Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.Lviv Startup Club
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer ToolsMark Billinghurst
 
Performance and Memory Tuning - Part III - Transcript.pdf
Performance and Memory Tuning - Part III - Transcript.pdfPerformance and Memory Tuning - Part III - Transcript.pdf
Performance and Memory Tuning - Part III - Transcript.pdfShaiAlmog1
 
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMDEdge AI and Vision Alliance
 
Triangle Visibility buffer
Triangle Visibility bufferTriangle Visibility buffer
Triangle Visibility bufferWolfgang Engel
 
Android UI Tips & Tricks
Android UI Tips & TricksAndroid UI Tips & Tricks
Android UI Tips & TricksDroidConTLV
 
Getting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James HalpernGetting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James HalpernFITC
 

Similaire à Bitmap management like a boss (20)

Stupid Canvas Tricks
Stupid Canvas TricksStupid Canvas Tricks
Stupid Canvas Tricks
 
3 track kinect@Bicocca - sdk e camere
3   track kinect@Bicocca - sdk e camere3   track kinect@Bicocca - sdk e camere
3 track kinect@Bicocca - sdk e camere
 
What is image in Swift?/はるふ
What is image in Swift?/はるふWhat is image in Swift?/はるふ
What is image in Swift?/はるふ
 
Day 1 presentation terminology
Day 1 presentation   terminologyDay 1 presentation   terminology
Day 1 presentation terminology
 
Kotlin Mullets
Kotlin MulletsKotlin Mullets
Kotlin Mullets
 
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficientTh 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
 
Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)
 
Introduction to Computer graphics
Introduction to Computer graphicsIntroduction to Computer graphics
Introduction to Computer graphics
 
Resize image vb.net
Resize image vb.netResize image vb.net
Resize image vb.net
 
Random And Dynamic Images Using Python Cgi
Random And Dynamic Images Using Python CgiRandom And Dynamic Images Using Python Cgi
Random And Dynamic Images Using Python Cgi
 
Image Processing using Matlab . Useful for beginners to learn Image Processing
Image Processing using Matlab . Useful for beginners to learn Image ProcessingImage Processing using Matlab . Useful for beginners to learn Image Processing
Image Processing using Matlab . Useful for beginners to learn Image Processing
 
Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.
Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.
Eugene Khvedchenya. State of the art Image Augmentations with Albumentations.
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
 
Performance and Memory Tuning - Part III - Transcript.pdf
Performance and Memory Tuning - Part III - Transcript.pdfPerformance and Memory Tuning - Part III - Transcript.pdf
Performance and Memory Tuning - Part III - Transcript.pdf
 
Core ML Speech
Core ML SpeechCore ML Speech
Core ML Speech
 
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
“Programming Vision Pipelines on AMD’s AI Engines,” a Presentation from AMD
 
Scmad Chapter07
Scmad Chapter07Scmad Chapter07
Scmad Chapter07
 
Triangle Visibility buffer
Triangle Visibility bufferTriangle Visibility buffer
Triangle Visibility buffer
 
Android UI Tips & Tricks
Android UI Tips & TricksAndroid UI Tips & Tricks
Android UI Tips & Tricks
 
Getting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James HalpernGetting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James Halpern
 

Plus de Somkiat Khitwongwattana

What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022Somkiat Khitwongwattana
 
Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30Somkiat Khitwongwattana
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018Somkiat Khitwongwattana
 
New things that android developer should not miss in 2019
New things that android developer should not miss in 2019New things that android developer should not miss in 2019
New things that android developer should not miss in 2019Somkiat Khitwongwattana
 
Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2Somkiat Khitwongwattana
 
Android Architecture Component in Real Life
Android Architecture Component in Real LifeAndroid Architecture Component in Real Life
Android Architecture Component in Real LifeSomkiat Khitwongwattana
 
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018Somkiat Khitwongwattana
 
Deep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture ComponentsDeep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture ComponentsSomkiat Khitwongwattana
 
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017Somkiat Khitwongwattana
 
What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017Somkiat Khitwongwattana
 
Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015Somkiat Khitwongwattana
 
Whats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind BangkokWhats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind BangkokSomkiat Khitwongwattana
 
What's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind BangkokWhat's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind BangkokSomkiat Khitwongwattana
 
ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]Somkiat Khitwongwattana
 

Plus de Somkiat Khitwongwattana (18)

What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022
 
Canvas API in Android
Canvas API in AndroidCanvas API in Android
Canvas API in Android
 
Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018
 
New things that android developer should not miss in 2019
New things that android developer should not miss in 2019New things that android developer should not miss in 2019
New things that android developer should not miss in 2019
 
Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2
 
Android Architecture Component in Real Life
Android Architecture Component in Real LifeAndroid Architecture Component in Real Life
Android Architecture Component in Real Life
 
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
 
Deep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture ComponentsDeep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture Components
 
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
 
What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017
 
Pokemon GO 101@Nextzy
Pokemon GO 101@NextzyPokemon GO 101@Nextzy
Pokemon GO 101@Nextzy
 
Advance Android Layout Walkthrough
Advance Android Layout WalkthroughAdvance Android Layout Walkthrough
Advance Android Layout Walkthrough
 
Interface Design for Mobile Application
Interface Design for Mobile ApplicationInterface Design for Mobile Application
Interface Design for Mobile Application
 
Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015
 
Whats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind BangkokWhats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind Bangkok
 
What's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind BangkokWhat's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind Bangkok
 
ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]
 

Dernier

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 

Dernier (20)

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 

Bitmap management like a boss