Secure Development with Android (Enrique Lopez Manas Technology Stream)

60
Android High Performance Enrique López Mañas Google Developer Expert & IT Consultor

Transcript of Secure Development with Android (Enrique Lopez Manas Technology Stream)

Page 1: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Android High Performance

Enrique López MañasGoogle Developer Expert & IT Consultor

Page 2: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Ego Slide

• IT Consultor

• Google Developer Expert

• @eenriquelopez

Page 3: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Performance

"how well a person, machine, etc. does a piece of work or an activity"

Cambridge

Page 4: Secure Development with Android (Enrique Lopez Manas Technology Stream)

But what is high performance?

• Strategies to create efficient software

Layout

Energy and battery

Security

Multithreading Programming patterns

Debugging techniques

Page 5: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Why is important?

• User Engagement• Costs• Maintenance• Quality

Page 6: Secure Development with Android (Enrique Lopez Manas Technology Stream)

3 Important Limits

0.1s 1s 10s

[Miller 1968; Card et al. 1991]:

Page 7: Secure Development with Android (Enrique Lopez Manas Technology Stream)

What this means in Android?

ANR

Page 8: Secure Development with Android (Enrique Lopez Manas Technology Stream)

ANR

• No response for input event in 5 seconds• BroadCast receiver still executing after 10 seconds

Page 9: Secure Development with Android (Enrique Lopez Manas Technology Stream)

How to avoid it?

Background operations? Show feedback!

Page 10: Secure Development with Android (Enrique Lopez Manas Technology Stream)

How to avoid it?

Splash Screen?

Page 11: Secure Development with Android (Enrique Lopez Manas Technology Stream)

How to avoid it?

Calculations? Worker thread!

Page 12: Secure Development with Android (Enrique Lopez Manas Technology Stream)

How to avoid it?

Systrace! TraceView!

Page 13: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Debug

DDMS

Page 14: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking

Page 15: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Layouts

TV: 24fps(NTSC), 25fps(PAL)

New cam-coders / slow motion: 48fps+

Blur can occur!

Apps: 60fps!

every 16 ms!

Page 16: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Layouts

Page 17: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Layouts

Page 18: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Reusing layouts

Page 19: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Reusing layouts

Page 20: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Reusing layouts

Page 21: Secure Development with Android (Enrique Lopez Manas Technology Stream)

ViewStub

ViewStub.inflate() View.setVisibility()

Page 22: Secure Development with Android (Enrique Lopez Manas Technology Stream)

ViewStub

Page 23: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Hierarchy Viewer

Page 24: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Profile GPU Rendering

Page 25: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Profile GPU Rendering

• Blue: draw• Purple: prepare• Red: process• Orange: execute

Page 26: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory

“the ability to remember information, experiences, and people"

Cambridge

Page 27: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Enumerations

Page 28: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Enumerations

Page 29: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Enumerations

Page 30: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Enumerations

Page 31: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Enumerations @IntDef

Page 32: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Enumerations @IntDef

Page 33: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Enumerations Summary

• Unnecessary allocations• AVOID USING THEM• Change as much as possible with static finalinteger values

Page 34: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Constants

Constants in the code should be static and final to take advantageof memory savings and to avoid initialization in Java compiler

Page 35: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Strings

Page 36: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Strings

Page 37: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory - Strings

Page 38: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory Leaks

“a memory leak is a type of resource leak that occurs when a computer program incorrectly manages memory allocations in such a way that memory which is no longer needed is not released.” Wikipedia

Page 39: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory Leaks - static fields

Page 40: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory Leaks - static fields

Page 41: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory Leaks - non-static inner classes

Page 42: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Memory Leaks - WeakReference

Page 43: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading

“Threading is a method of hair removal originating in Asia.”

Wikipedia

Page 44: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading

“is the smallest sequence of programmed instructions that can be managed independently by a scheduler”

Wikipedia

Page 45: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading

• AsyncTask • Loader • Threads…

Know your war!

Page 46: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading - AsyncTask

Communicate Worker Thread with UI

Does not need to communicate UI? Does not need to notify user? DOES NOT NEED ASYNCTASK!

If the AsyncTask has all parameters Void, you are only implementing doInBackground() and you do not need an AsyncTask

Page 47: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading - AsyncTaskLoader

Use it to fetch data

Same features as AsyncTask…

…plus the Activity life-cycle independency and data caching

Page 48: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading - AsyncTaskLoader

Page 49: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading - Services

• Not threads!• Executed in UI Thread by default• Never start a long running operation!• Lifecycle

Page 50: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Threading - IntentService

• Particular implementation of a Service• Execute sequential operations in background• Don’t need to handle the lifecycle

Page 51: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking

“process of communication between different terminal nodes to exchange data”

Me

Page 52: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking - best practices

Latency Gauging

Page 53: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking - best practices

Batch connections

• Wait, collect and send • (Analytics)

Page 54: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking - best practices

Pre-fetch

• Download as much as possible • (specially if idle connection)

Page 55: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking - best practices

Queuing connections

Page 56: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking - best practices

Caching responses

Page 57: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking - best practices

Last modified

Page 58: Secure Development with Android (Enrique Lopez Manas Technology Stream)

Networking - best practices

Exponential back-off

Page 59: Secure Development with Android (Enrique Lopez Manas Technology Stream)

I want your feedback!

http://bit.ly/droidConGR

Page 60: Secure Development with Android (Enrique Lopez Manas Technology Stream)

#dfist