SlideShare ist ein Scribd-Unternehmen logo
1 von 125
| CAPABILITIES
Getting Intimate
with Images on
Android
@james_halpern | james.halpern@xtremelabs.com
Pulse
Pulse
THE SITUATION…
Why Kittens are Awesome
What happened?
| CAPABILITIES
Introduction
@james_halpern | james.halpern@xtremelabs.com
MISSION
To become the leading provider of mobile
solutions to the world’s most important
companies as we help drive a revolution in
computing.
VALUES
Transparency
Opportunity
Meritocracy
Execution
Introduction
• 2+ years of Android
• 6 product launches
• 2 Google Play apps
• 3+ Android libraries
• 20+ Android projects impacted by tools
development, and counting
Why I Started
Why I Started
Performance Bugs
Design Time
My Library
Image Utilities
Open Source
https://github.com/xtremelabs/xl-image_utils_lib-android
Available under Apache 2.0
Objectives
Simple
Fast
Powerful
Goal
Problems
Tools
API
Debugging
Solve the images problem,
Build great apps
| CAPABILITIES
Production
Quality Software
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
Non-Production Quality
try {
// 5 BILLION lines of code!
} catch (Exception e) {
// Just in case there is a bug,
// let’s not crash.
}
Non-Production Quality
new AsyncTask<Void, Void, Bitmap>() {
public Bitmap doInBackground() {
Bitmap bitmap = fetchBitmap(url);
return bitmap;
}
public void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
}
What Users Want
The app should just work.
Lists that just work
Resources that adapt to
screen size and resolution
Lazy loading that does not
interfere with list items
Optimizations for
ImageView size
Images that are available
before you scroll to them
Smooth, flawless
scrolling, across all devices
Anticipate the user’s next
action
Practices
1. Clean Code
2. Design Patterns
3. Unit Testing
4. Test Driven Development
| CAPABILITIES
Platform
Fragmentation
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
Fragmentation
Android vs. iOS
Android
• 16MB – 96MB
iOS
• 128MB – 512MB
Why Images are Tough
• Available memory differs by phone
16MB?
32MB?
64MB?
Why Images are Tough
• Screen Density/Resolution
Lower Density = Fewer Pixels = Less Memory Used
Higher Density = More Pixels = More Memory Used
| CAPABILITIES
Image Decoding
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
Bitmap Complexities
Bitmap Complexities
Encoded Decoded
Small File Size High Memory Usage
Effect of Decoding
This cute kitten is:
• ~20kB on disk
• ~500kB in memory
Effect of Decoding
• ~33kB on disk
• ~1.5MB in memory
Effect of Decoding
5 megapixel image
• ~1.8MB on disk
• ~20MB in memory!!!
Approximating Bitmap Sizes
Bit Depth * Number of Pixels = Approximate Size
Examples of bit depth:
ARGB-8888  4 bytes/pixel
RGB-565  2 bytes/pixel
Big Image, Big Problem
What happens if an image is too big?
Example: The 15x15dp Ad
Summary
• Images are big in memory
• Scaling can save memory
• The API may provide bad images
• Different image formats perform differently
| CAPABILITIES
Threads
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
Context Switching
Main
Thread 1
Thread 2
UI will not update here!
Context Switching
More Threads = Fewer UI Updates
Context Switching
Main
Network 1
Network 2
Network 3
Disk 1
Sources of Background Threads
• Network
• Disk access
• Heavy CPU tasks
– Renders
– Encoding
– Decoding
– etc.
Typical App – Threads
1. Analytics system? (1-X threads)
2. Ad system? (1-X threads)
3. Network library? (1-10 threads)
4. Content providers? (1-255 threads)
5. Disk/File access threads (1-X threads)
Network Threads
Network 1
Network 2
Network 3
Context Switching
Disk 1
Strict Mode
StrictMode.setThreadPolicy(
new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyDeath()
.build()
);
| CAPABILITIES
Communication
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
Communication
Product
Design
Engineering
The Density Independent Pixel
px = dp * (dpi / 160)
1dp ~= 1/160th of an inch (but not really)
1dp may be smaller than a pixel on low density
phones!
Forgetting Pixels
This is not iPhone!
Don’t think in pixels!
Pixels are different sizes on different phones
With that said…
Designers still need to consider pixels…
Talking to Designers
Break it down!
1. Understand how it works
2. Know what to build
Android for Designers
http://petrnohejl.github.io/Android-Cheatsheet-For-Graphic-Designers/
How it works
Heading R
Heading R
How it works
Heading R
Heading R
H WH W
How it works
Heading R
Heading R
H WH W
What to Build
Back to pixels…
Targeting Resolutions
Providing some Resolutions:
1. What devices?
2. Choose 2-4 resolutions.
3. Test ON DEVICE.
4. Alignment: Start? End? Center?
Targeting Resolutions
http://en.wikipedia.org/wiki/Comparison_of_Android_devices
(1080/1200) x 1920
(720/768/800) x 1280
480 x 800
320 x 480
Flexible Designs
Only scale down.
Don’t scale up!
Planning for the Small Screen
Heading R
Heading R
Communicate Performance
Larger Image = Slower Performance
Design With Small Images = Fast App
9-Patches > Images
Summary
• Memory limits
• Scrolling performance
• Multiple densities
• Multiple resolutions
• ImageView references
• Image Variety
• Pixel Formats
• Image Scaling
• Performance
• And on and on…
The problem is not limited
to engineering!
| CAPABILITIES
Decoding Images
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
The BitmapFactory
Bitmap
File
InputStream Resource
Byte[]
The BitmapFactory
Bitmap bitmap;
bitmap = BitmapFactory.decodeFile(filePath);
bitmap = BitmapFactory.decodeStream(inputStream);
etc.
Options
BitmapFactory.Options options;
options = new BitmapFactory.Options();
// Full sized image
options.inSampleSize = 1;
// 75% smaller
options.inSampleSize = 2;
Applying Scaling
What is the optimal sample size?
Applying Scaling
Applying Scaling
Calculating Scaling
Scaled Dimension = Image Dimension / Sample Size
Optimal Sample Size:
Sample Size = (Floor) Image Width / View Width
OR
Sample Size = (Floor) Image Height / View Height
Calculating Scaling
Which one? Height or Width?
Calculating Scaling
• Fit for largest size
– Crop
• Fit for smallest size
– Fit
• Always smaller than view
– Saves memory, drops quality
• Round to closest scaling
– May hurt quality
Applying Scaling
Use largest size -- Crop Use smallest size -- Fit
Summary
Build for the
kitten you want,
Not for the
kitten you have.
Scale.
| CAPABILITIES
API Design
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
The Learning Curve
0
10
20
30
40
50
60
70
80
90
Start Setup First Request Callbacks Placeholders
ImageLoader
Other
Objectives
Simple.
Setup Time
Get started in <5min:
onCreate:
mImageLoader = ImageLoader.buildImageLoaderForActivity(this);
onDestroy:
mImageLoader.destroy();
The First Call
imageLoader.loadImage(imageView, url);
Adding Complexity
• Pixel format
• Placeholders
• Scaling
• Memory safety
Adding Complexity
Options options = new Options();
options.autoDetectBounds = false;
Adding Complexity
imageLoader.loadImage(imageView, url, options);
Calling Back
ImageLoaderListener listener =
new ImageloaderListener() {
public void onSuccess(ImageResponse response) {}
public void onFailure(ImageError error) {}
}
imageLoader.loadImage(
imageView, url, options, listener);
Calling Back
public void onSuccess(
ImageResponse response) {
ImageView view;
Bitmap bitmap;
bitmap = response.getBitmap();
view = response.getImageView();
// Could have animated here!
view.setImageBitmap(bitmap);
}
Calling Back
public void onSuccess(
ImageResponse response) {
…
ReturnedFrom from;
from = response.getReturnedFrom();
switch (from) {
case MEMORY:
// Don’t animate!
default:
// Animate here!
}
…
}
Too Many Parameters…
imageLoader.loadImage(
imageView, url, options, listener);
Box the Request
ImageRequest imageRequest =
new ImageRequest(url);
imageRequest.setImageView(imageView);
imageRequest.setOptions(options);
imageRequest.setListener(listener);
imageLoader.loadImage(imageRequest);
Requests from File System
ImageRequest imageRequest =
new ImageRequest(URL);
ImageRequest imageRequest =
new ImageRequest(URI);
Requests from File System
String file =
new File(path).toUri().toString();
ImageRequest request =
new ImageRequest(file);
Why use the same system?
1. Image scaling
2. Memory cache
3. Pre-built adapter features
4. Will not retain Activities/Fragments
Precaching
ImageLoader.precacheToDisk(context, uri);
Additional APIs
• Custom Memory Caches
• Cache Settings
– Size, structure
• Manual Evictions
• Cancelling Requests
API Summary
Save time.
Keep it simple.
| CAPABILITIES
Stack Traces Tell
White Lies
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
Let’s start with a Stack Trace!
01-25 05:05:49.877: ERROR/dalvikvm-heap(3896): 6291456-byte external allocation too large for this
process.
01-25 05:05:49.877: ERROR/(3896): VM wont let us allocate 6291456 bytes
01-25 05:05:49.877: ERROR/AndroidRuntime(3896): Uncaught handler: thread main exiting due to
uncaught exception
01-25 05:05:49.917: ERROR/AndroidRuntime(3896): java.lang.OutOfMemoryError: bitmap size
exceeds VM budget
01-25 05:05:49.917: ERROR/AndroidRuntime(3896): at
android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
01-25 05:05:49.917: ERROR/AndroidRuntime(3896): at
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:304)
01-25 05:05:49.917: ERROR/AndroidRuntime(3896): at
android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:149)
01-25 05:05:49.917: ERROR/AndroidRuntime(3896): at
android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:174)
Let’s start with a Stack Trace!
• java.lang.OutOfMemoryError: bitmap size
exceeds VM budget
• at:
android.graphics.BitmapFactory.decodeStream
Errors are Symptoms
Example
onCreate(…) {
foo = new Foo();
}
onStart() {
foo.bar();
}
onStop() {
foo = null;
}
Example – NullPointerException!
onCreate(…) {
foo = new Foo();
}
onStart() {
foo.bar(); // Crash!
}
onStop() {
foo = null; //  Probably not intended
}
Bitmap Factory - OOM
Maximum Heap Size
Maximum image
size in caching
system
Memory leak increasing heap size
Bitmap Factory - OOM
Maximum Heap Size
Example – Memory Leak App
• Timer leaking memory every 4ms
• Expected error:
09-13 10:51:14.401: E/AndroidRuntime(7170): java.lang.OutOfMemoryError
09-13 10:51:14.401: E/AndroidRuntime(7170): at
com.example.outofmemoryomg.OutOfMemoryActivity$1.run(OutOfMemoryActivity.java:40)
09-13 10:51:14.401: E/AndroidRuntime(7170): at java.util.Timer$TimerImpl.run(Timer.java:284)
• OutOfMemoryActivity.java:40
Example – Memory Leak App
• Actual Error:
09-13 10:52:38.159: E/dalvikvm-heap(7471): Out of memory on a 576016-byte allocation.
09-13 10:52:38.166: E/AndroidRuntime(7471): FATAL EXCEPTION: pool-1-thread-1
09-13 10:52:38.166: E/AndroidRuntime(7471): java.lang.OutOfMemoryError
09-13 10:52:38.166: E/AndroidRuntime(7471): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
09-13 10:52:38.166: E/AndroidRuntime(7471): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:527)
09-13 10:52:38.166: E/AndroidRuntime(7471): at
com.xtremelabs.imageutils.DiskLRUCacher.getBitmapSynchronouslyFromDisk(DiskLRUCacher.java:172)
09-13 10:52:38.166: E/AndroidRuntime(7471): at com.xtremelabs.imageutils.DiskLRUCacher.access$1(DiskLRUCacher.java:166)
09-13 10:52:38.166: E/AndroidRuntime(7471): at com.xtremelabs.imageutils.DiskLRUCacher$2.run(DiskLRUCacher.java:90)
09-13 10:52:38.166: E/AndroidRuntime(7471): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-13 10:52:38.166: E/AndroidRuntime(7471): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-13 10:52:38.166: E/AndroidRuntime(7471): at java.lang.Thread.run(Thread.java:856)
• BitmapFactory.decodeStream(BitmapFact
ory.java:527)
| CAPABILITIES
Debugging:
MAT & DDMS
Problems Tools API Debugging
@james_halpern | james.halpern@xtremelabs.com
Proving the Leak
Introducing MAT
• Memory Analyzer Tool
– http://www.eclipse.org/mat/
– http://download.eclipse.org/mat/1.2/update-site/
Link to Tutorial:
http://www.google.com/events/io/2011/sessions/memory-management-for-android-
apps.html
Leak proven!
What is DDMS?
Dalvik Debug Monitor Server
Provides massive amounts of debug information
What is DDMS?
• Helps with:
– Performance
– Profiling
– Memory
– File system access
– Emulator options
DDMS and Memory
DDMS and Memory
Tips for Hunting Leaks
• Reduce image quality significantly!
– Sample Size = 128
• Remove tested, big objects
• Repeat the offending action
• Use the “Leak Suspects Report”
DDMS – Threads and Performance
• Debug number of threads running
– Are you creating too many threads?
– Threads lingering beyond their lifetime?
– Threads eating up performance/hanging?
UI Thread -- Are we blocking it?
DDMS – Threads and Performance
DDMS – Threads and Performance
DDMS – Threads and Performance
Method-by-method breakdown of performance
| CAPABILITIES
Conclusion
https://github.com/xtremelabs/xl-image_utils_lib-android
@james_halpern | james.halpern@xtremelabs.com
Problems Tools API Debugging
| CAPABILITIES
Q&A
https://github.com/xtremelabs/xl-image_utils_lib-android
@james_halpern | james.halpern@xtremelabs.com
Problems Tools API Debugging
| CAPABILITIES
Thank you!
@james_halpern | james.halpern@xtremelabs.com

Weitere ähnliche Inhalte

Andere mochten auch

Glass w/o Glass: Developing native Glass applications without the hardware w...
 Glass w/o Glass: Developing native Glass applications without the hardware w... Glass w/o Glass: Developing native Glass applications without the hardware w...
Glass w/o Glass: Developing native Glass applications without the hardware w...FITC
 
Badass Motion Design for Front-end Developers
Badass Motion Design for Front-end DevelopersBadass Motion Design for Front-end Developers
Badass Motion Design for Front-end DevelopersFITC
 
Prolific Minded
Prolific MindedProlific Minded
Prolific MindedFITC
 
Learning from Science Fiction with Greg Borenstein
Learning from Science Fiction with Greg BorensteinLearning from Science Fiction with Greg Borenstein
Learning from Science Fiction with Greg BorensteinFITC
 
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemDownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemFITC
 
Making Mixed Reality Living Spaces
Making Mixed Reality Living SpacesMaking Mixed Reality Living Spaces
Making Mixed Reality Living SpacesFITC
 
! or ? with Chip Kidd
! or ? with Chip Kidd! or ? with Chip Kidd
! or ? with Chip KiddFITC
 
Our Once and Now Relationship with the Book with Pamela Hilborn
Our Once and Now Relationship with the Book with Pamela HilbornOur Once and Now Relationship with the Book with Pamela Hilborn
Our Once and Now Relationship with the Book with Pamela HilbornFITC
 
PageCloud Reimagines The Future of Website Creation with Craig Fitzpatrick
PageCloud Reimagines The Future of Website Creation with Craig FitzpatrickPageCloud Reimagines The Future of Website Creation with Craig Fitzpatrick
PageCloud Reimagines The Future of Website Creation with Craig FitzpatrickFITC
 
UX Lessons from the USSR: The Trouble with Manifestos with Erik von Stackelberg
 UX Lessons from the USSR: The Trouble with Manifestos with Erik von Stackelberg UX Lessons from the USSR: The Trouble with Manifestos with Erik von Stackelberg
UX Lessons from the USSR: The Trouble with Manifestos with Erik von StackelbergFITC
 
Design as a Means of Reflection
Design as a Means of ReflectionDesign as a Means of Reflection
Design as a Means of ReflectionFITC
 
Swaggy Layouts With Flexbox
Swaggy Layouts With FlexboxSwaggy Layouts With Flexbox
Swaggy Layouts With FlexboxFITC
 
Prolific Minded
Prolific MindedProlific Minded
Prolific MindedFITC
 
Goofy, Goodfellas and a Gardener: The Masters of Experience Design.
Goofy, Goodfellas and a Gardener: The Masters of Experience Design.Goofy, Goodfellas and a Gardener: The Masters of Experience Design.
Goofy, Goodfellas and a Gardener: The Masters of Experience Design.FITC
 
Empowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsEmpowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsFITC
 
From Box to Bots in Minutes
From Box to Bots in MinutesFrom Box to Bots in Minutes
From Box to Bots in MinutesFITC
 
Responsive Design, Past, Present and Future
Responsive Design, Past, Present and FutureResponsive Design, Past, Present and Future
Responsive Design, Past, Present and FutureFITC
 
10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...
10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...
10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...FITC
 
Apps for the Multi-Device World
Apps for the Multi-Device WorldApps for the Multi-Device World
Apps for the Multi-Device WorldFITC
 

Andere mochten auch (19)

Glass w/o Glass: Developing native Glass applications without the hardware w...
 Glass w/o Glass: Developing native Glass applications without the hardware w... Glass w/o Glass: Developing native Glass applications without the hardware w...
Glass w/o Glass: Developing native Glass applications without the hardware w...
 
Badass Motion Design for Front-end Developers
Badass Motion Design for Front-end DevelopersBadass Motion Design for Front-end Developers
Badass Motion Design for Front-end Developers
 
Prolific Minded
Prolific MindedProlific Minded
Prolific Minded
 
Learning from Science Fiction with Greg Borenstein
Learning from Science Fiction with Greg BorensteinLearning from Science Fiction with Greg Borenstein
Learning from Science Fiction with Greg Borenstein
 
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemDownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
 
Making Mixed Reality Living Spaces
Making Mixed Reality Living SpacesMaking Mixed Reality Living Spaces
Making Mixed Reality Living Spaces
 
! or ? with Chip Kidd
! or ? with Chip Kidd! or ? with Chip Kidd
! or ? with Chip Kidd
 
Our Once and Now Relationship with the Book with Pamela Hilborn
Our Once and Now Relationship with the Book with Pamela HilbornOur Once and Now Relationship with the Book with Pamela Hilborn
Our Once and Now Relationship with the Book with Pamela Hilborn
 
PageCloud Reimagines The Future of Website Creation with Craig Fitzpatrick
PageCloud Reimagines The Future of Website Creation with Craig FitzpatrickPageCloud Reimagines The Future of Website Creation with Craig Fitzpatrick
PageCloud Reimagines The Future of Website Creation with Craig Fitzpatrick
 
UX Lessons from the USSR: The Trouble with Manifestos with Erik von Stackelberg
 UX Lessons from the USSR: The Trouble with Manifestos with Erik von Stackelberg UX Lessons from the USSR: The Trouble with Manifestos with Erik von Stackelberg
UX Lessons from the USSR: The Trouble with Manifestos with Erik von Stackelberg
 
Design as a Means of Reflection
Design as a Means of ReflectionDesign as a Means of Reflection
Design as a Means of Reflection
 
Swaggy Layouts With Flexbox
Swaggy Layouts With FlexboxSwaggy Layouts With Flexbox
Swaggy Layouts With Flexbox
 
Prolific Minded
Prolific MindedProlific Minded
Prolific Minded
 
Goofy, Goodfellas and a Gardener: The Masters of Experience Design.
Goofy, Goodfellas and a Gardener: The Masters of Experience Design.Goofy, Goodfellas and a Gardener: The Masters of Experience Design.
Goofy, Goodfellas and a Gardener: The Masters of Experience Design.
 
Empowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsEmpowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris Mills
 
From Box to Bots in Minutes
From Box to Bots in MinutesFrom Box to Bots in Minutes
From Box to Bots in Minutes
 
Responsive Design, Past, Present and Future
Responsive Design, Past, Present and FutureResponsive Design, Past, Present and Future
Responsive Design, Past, Present and Future
 
10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...
10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...
10-Foot 2 Inches: Designing Apps for Up-Close & Afar with Jenna Marino, Patri...
 
Apps for the Multi-Device World
Apps for the Multi-Device WorldApps for the Multi-Device World
Apps for the Multi-Device World
 

Ähnlich wie Getting Intimate with Images on Android with James Halpern

Mo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformanceMo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformancejohncromartie
 
Iasi code camp 12 october 2013 responsive images in the wild-vlad zelinschi
Iasi code camp 12 october 2013 responsive images in the wild-vlad zelinschiIasi code camp 12 october 2013 responsive images in the wild-vlad zelinschi
Iasi code camp 12 october 2013 responsive images in the wild-vlad zelinschiCodecamp Romania
 
FITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesFITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesRami Sayar
 
Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...
Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...
Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...InfiniteGraph
 
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....Aidan Foster
 
Better images for video - Jeremy Brown
Better images for video - Jeremy BrownBetter images for video - Jeremy Brown
Better images for video - Jeremy BrownJeremy Brown
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesVitaly Friedman
 
Revisiting the Six Degrees Problem with a Graph Database - Nick Quinn
Revisiting the Six Degrees Problem with a Graph Database - Nick QuinnRevisiting the Six Degrees Problem with a Graph Database - Nick Quinn
Revisiting the Six Degrees Problem with a Graph Database - Nick Quinnjaxconf
 
Strata London - Deep Learning 05-2015
Strata London - Deep Learning 05-2015Strata London - Deep Learning 05-2015
Strata London - Deep Learning 05-2015Turi, Inc.
 
Performance.now() fast but not furious
Performance.now()   fast but not furiousPerformance.now()   fast but not furious
Performance.now() fast but not furiousAnna Migas
 
Android design lecture #1
Android design   lecture #1Android design   lecture #1
Android design lecture #1Vitali Pekelis
 
Universal Image Loader: Story, Architecture, FAQ
Universal Image Loader: Story, Architecture, FAQUniversal Image Loader: Story, Architecture, FAQ
Universal Image Loader: Story, Architecture, FAQSergey Tarasevich
 
Dev tools rendering & memory profiling
Dev tools rendering & memory profilingDev tools rendering & memory profiling
Dev tools rendering & memory profilingOpen Academy
 
Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013
Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013
Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013Máté Nádasdi
 
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
 
Drupalcon Asia - "Drupal 8 Mobile in its DNA"
Drupalcon Asia - "Drupal 8 Mobile in its DNA"Drupalcon Asia - "Drupal 8 Mobile in its DNA"
Drupalcon Asia - "Drupal 8 Mobile in its DNA"Ram Singh
 
Trouble with distribution
Trouble with distributionTrouble with distribution
Trouble with distributionJ On The Beach
 
Introduction to mobile programming with Androids.
Introduction to mobile programming with Androids. Introduction to mobile programming with Androids.
Introduction to mobile programming with Androids. Maksim Golivkin
 

Ähnlich wie Getting Intimate with Images on Android with James Halpern (20)

IMAGE PROCESSING
IMAGE PROCESSINGIMAGE PROCESSING
IMAGE PROCESSING
 
Mo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformanceMo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformance
 
Iasi code camp 12 october 2013 responsive images in the wild-vlad zelinschi
Iasi code camp 12 october 2013 responsive images in the wild-vlad zelinschiIasi code camp 12 october 2013 responsive images in the wild-vlad zelinschi
Iasi code camp 12 october 2013 responsive images in the wild-vlad zelinschi
 
FITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesFITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive Images
 
Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...
Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...
Everything Goes Better With Bacon: Revisiting the Six Degrees Problem with a ...
 
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
 
Better images for video - Jeremy Brown
Better images for video - Jeremy BrownBetter images for video - Jeremy Brown
Better images for video - Jeremy Brown
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and Techniques
 
Revisiting the Six Degrees Problem with a Graph Database - Nick Quinn
Revisiting the Six Degrees Problem with a Graph Database - Nick QuinnRevisiting the Six Degrees Problem with a Graph Database - Nick Quinn
Revisiting the Six Degrees Problem with a Graph Database - Nick Quinn
 
Strata London - Deep Learning 05-2015
Strata London - Deep Learning 05-2015Strata London - Deep Learning 05-2015
Strata London - Deep Learning 05-2015
 
Performance.now() fast but not furious
Performance.now()   fast but not furiousPerformance.now()   fast but not furious
Performance.now() fast but not furious
 
Android design lecture #1
Android design   lecture #1Android design   lecture #1
Android design lecture #1
 
Universal Image Loader: Story, Architecture, FAQ
Universal Image Loader: Story, Architecture, FAQUniversal Image Loader: Story, Architecture, FAQ
Universal Image Loader: Story, Architecture, FAQ
 
Dev tools rendering & memory profiling
Dev tools rendering & memory profilingDev tools rendering & memory profiling
Dev tools rendering & memory profiling
 
Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013
Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013
Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013
 
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
 
imgproxy is amazing
imgproxy is amazingimgproxy is amazing
imgproxy is amazing
 
Drupalcon Asia - "Drupal 8 Mobile in its DNA"
Drupalcon Asia - "Drupal 8 Mobile in its DNA"Drupalcon Asia - "Drupal 8 Mobile in its DNA"
Drupalcon Asia - "Drupal 8 Mobile in its DNA"
 
Trouble with distribution
Trouble with distributionTrouble with distribution
Trouble with distribution
 
Introduction to mobile programming with Androids.
Introduction to mobile programming with Androids. Introduction to mobile programming with Androids.
Introduction to mobile programming with Androids.
 

Mehr von FITC

Cut it up
Cut it upCut it up
Cut it upFITC
 
Designing for Digital Health
Designing for Digital HealthDesigning for Digital Health
Designing for Digital HealthFITC
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript PerformanceFITC
 
Surviving Your Tech Stack
Surviving Your Tech StackSurviving Your Tech Stack
Surviving Your Tech StackFITC
 
How to Pitch Your First AR Project
How to Pitch Your First AR ProjectHow to Pitch Your First AR Project
How to Pitch Your First AR ProjectFITC
 
Start by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the AnswerStart by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the AnswerFITC
 
Cocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s StoryCocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s StoryFITC
 
Everyday Innovation
Everyday InnovationEveryday Innovation
Everyday InnovationFITC
 
HyperLight Websites
HyperLight WebsitesHyperLight Websites
HyperLight WebsitesFITC
 
Everything is Terrifying
Everything is TerrifyingEverything is Terrifying
Everything is TerrifyingFITC
 
Post-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanPost-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanFITC
 
The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)FITC
 
East of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR GameEast of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR GameFITC
 
Creating a Proactive Healthcare System
Creating a Proactive Healthcare SystemCreating a Proactive Healthcare System
Creating a Proactive Healthcare SystemFITC
 
World Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product DesignWorld Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product DesignFITC
 
The Power of Now
The Power of NowThe Power of Now
The Power of NowFITC
 
High Performance PWAs
High Performance PWAsHigh Performance PWAs
High Performance PWAsFITC
 
Rise of the JAMstack
Rise of the JAMstackRise of the JAMstack
Rise of the JAMstackFITC
 
From Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self DiscoveryFrom Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self DiscoveryFITC
 
Projects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time ForProjects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time ForFITC
 

Mehr von FITC (20)

Cut it up
Cut it upCut it up
Cut it up
 
Designing for Digital Health
Designing for Digital HealthDesigning for Digital Health
Designing for Digital Health
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript Performance
 
Surviving Your Tech Stack
Surviving Your Tech StackSurviving Your Tech Stack
Surviving Your Tech Stack
 
How to Pitch Your First AR Project
How to Pitch Your First AR ProjectHow to Pitch Your First AR Project
How to Pitch Your First AR Project
 
Start by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the AnswerStart by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the Answer
 
Cocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s StoryCocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s Story
 
Everyday Innovation
Everyday InnovationEveryday Innovation
Everyday Innovation
 
HyperLight Websites
HyperLight WebsitesHyperLight Websites
HyperLight Websites
 
Everything is Terrifying
Everything is TerrifyingEverything is Terrifying
Everything is Terrifying
 
Post-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanPost-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future Human
 
The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)
 
East of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR GameEast of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR Game
 
Creating a Proactive Healthcare System
Creating a Proactive Healthcare SystemCreating a Proactive Healthcare System
Creating a Proactive Healthcare System
 
World Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product DesignWorld Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product Design
 
The Power of Now
The Power of NowThe Power of Now
The Power of Now
 
High Performance PWAs
High Performance PWAsHigh Performance PWAs
High Performance PWAs
 
Rise of the JAMstack
Rise of the JAMstackRise of the JAMstack
Rise of the JAMstack
 
From Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self DiscoveryFrom Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self Discovery
 
Projects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time ForProjects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time For
 

Kürzlich hochgeladen

IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119APNIC
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书rnrncn29
 
TRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxTRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxAndrieCagasanAkio
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predieusebiomeyer
 
ETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxNIMMANAGANTI RAMAKRISHNA
 
Company Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxCompany Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxMario
 
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书rnrncn29
 
Unidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxUnidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxmibuzondetrabajo
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa494f574xmv
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 

Kürzlich hochgeladen (11)

IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
 
TRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxTRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptx
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predi
 
ETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptx
 
Company Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxCompany Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptx
 
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
 
Unidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxUnidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptx
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 

Getting Intimate with Images on Android with James Halpern

Hinweis der Redaktion

  1. ----- Meeting Notes (2013-05-02 14:18) -----NameLead Engineer
  2. ----- Meeting Notes (2013-05-02 14:18) -----I&apos;m hear to talk about images!They&apos;re complex.Need to learn how to deal with them.
  3. ----- Meeting Notes (2013-05-02 14:18) -----How many devs? Android devs?Designers? Android designers?Product/management? Other?Dev focus. Good content for designers.
  4. ----- Meeting Notes (2013-05-02 14:18) -----At Xtreme Labswe strive to build the best mobile appsfor the biggest companies
  5. ----- Meeting Notes (2013-05-02 14:18) -----We hold a core set of values that help usToday, execution
  6. ----- Meeting Notes (2013-05-02 14:18) -----Passion for librariesReusable codeMaking lives simple
  7. ----- Meeting Notes (2013-05-02 14:18) -----HTC Status -- Challenging16MB of memorySlowWeird screen resolution
  8. ----- Meeting Notes (2013-05-02 14:18) -----Four key areas with problemsBugs -- Flickering, wrong view, OOMDesign -- Scaling, aspect ratio
  9. ----- Meeting Notes (2013-05-02 14:18) -----Available on github
  10. ----- Meeting Notes (2013-05-02 14:18) -----Designers -- How design impacts devDevelopers -- How to solveProduct -- Why it takes devs a whileWalk you through problem to solution
  11. ----- Meeting Notes (2013-05-02 14:18) -----Less of a problem on iOSStill a problem on iOSThis solution -- Relevant to iOS
  12. ----- Meeting Notes (2013-05-02 14:18) -----Less RAM than Disk!Yet bigger in RAM!
  13. ----- Meeting Notes (2013-05-02 14:18) -----Will crash the HTC Status &amp; replenish
  14. ----- Meeting Notes (2013-05-02 14:18) -----Same image fits in different views
  15. ----- Meeting Notes (2013-05-02 14:18) -----Same view can require different sizes