The Good, the Bad and the Ugly things to do with android

The Good,
                       The Bad,
                        Mobile2Days
                       and The Ugly…
                       Things to do with Android
Stanojko Markovik
03.11.2011@Java2Days
Your presenter…
• Speaks a few languages (Java, C++, Python…)
• Currently works at the ARTEMIS R&D
  department at SudParis Telecom Institute
• Worked with android from v1.1
both for app development and custom ROMs
• Linux geek
• JUGMK member
While developing
for Android you
can do…
Good stuff
Bad Stuff
UGLY
stuff…
What will we talk about??

         • Good practices and the
     1     proper way to do things

         • Bad things people tend
     2     to do and how to evade…

         • The ugly things no one
     3     wants to talk about.
THE GOOD
The standard stuff first
• Always keep Clean and concise code
• DRY KISS - Always
• Be weary of memory usage
•  Try to use libraries as external JAR files.
  - modularity
  - easier development sloop
• If you comment something out.. Erase it..
    You will probably never use it again
Android Specific stuff - UI
            • Android uses a modified version of
              the MVC patter,
              Views are made in XML.
              Populated by code

            • Android is aware of the display size.
              So use this, and have different
              graphics. For each size of the screen
Android Specific stuff - UI
 • Try to utilize the 9patch drawables as much as
   possible




        Example 1                    Example 2
Android Specific stuff - UI
 • If the shapes are simple.. Write them in XML




                Sample Round shape definition in XML
Android Specific stuff - Code
• Differentiate the LinkedList from the ArrayList
  in the mobile world, it matters…


• Android uses a Google re-written Java,
  so most of the standard java classes you use are “optimized”, optimizations
  have bugs .


• Cleanup code before using it..
  The Android compiler does not exclude unused classes. This will greatly
  reduce your application size
Android Specific stuff - SDK

• Always have a target SDK, and a target device.
  Maybe the code can be uniform and meant for all device, but the UI cannot.


• Forget String-s use StringBuilders

• Use a Debug condition for your Log statements.
  Remember that : logs concat strings and are NOISY!


• Android has a GC, but System.gc() doesn’t work!
  Have it in mind…
Android Specific stuff
Visual Scaling
• Try to get used to thinking in DIPs and SP.

• A good developer always wraps his content!

• Android has a GC, but System.gc() doesn’t work!
  Have it in mind…
View.getTag() method
This is the “hidden” pocket meant for the object to
which the view is refering

• Use it on buttons to hold a state, or reference

• Use it with cursor adapters to hold an object or
  database ID

• Use it with custom views to hold misc data for the
  extra data you need.
notifyChange() method

Very often you have to write applications that use
adapters from databases or webservices.

The notifyChange() method is very important for
automatic update and/or content change.

Whenever you insert/update any data in the source it is
important to call this method to tell all the users to
refresh or re-query their data.
THE BAD…
Developers tend to be lazy…
• Respect The Activity Lifecycle
Database Cursors
• Database connections are often left open or half open

- This wreaks havoc in the android heap and memory
  management, Never forget to cursor.close()

- If this is hard, then either call the manageCursor to
  link the cursor to the activity lifecycle or use cursor
  helper.
Use XML resources with care
XML layouts are a very handy, but developers over or
under use them very often.

- Handle the system services (layoutInflater)
- Inflate to combine layouts, much better and easier
  than writing it in code.
- Don’t forget to recycle the Inflated layouts !
- Externalize ALL Strings to strings.xml
- Use values for system configurations
Don’t over nest

“Lazy” developers tend to overuse the LinearLayout

 Instead of using RelativeLayout


 Eclipse Demo here…
Cursor adapters and lists
• Use relative layout for the list items
• Use recyclable views and adapter
• Load images in the backgroud



Eclipse Demo here…
Background and Services
• Differentiate when to use binded and unbinded
  services.

• Understand the onStartCommand() method and it’s
  return statement.

• Differentiate threads and asynctasks

• Never use Toast or Dialog from a service
View Hierarchy
Developers tend to create complex view hierarchies
which are difficult for the GPU to render and refresh.

Views should be simple and a better resolution is for the
view hierarchy to be wide than tall.

Use the HierarchyViewer tool to find the skeleton of
your activity.
View Hierarchy GOOD example
View Hierarchy BAD example
THE UGLY…
ANR


• Affected :
  Activity, Service, BroadcastReceiver
• Reason :
  Lifecycle rules broken
• Fix
  Run heavy processing outside of the main thread, use
  asynctask or another thread.
Fantom Apps                     The error




        Sample LogCat output.
Fantom Apps - The Cause
In general this is a very difficult error to trace
- No Java StackTrace
- No Error screen

However if you look at the debug dump, you can see
That the heap is being overflowed.

To check
Runtime.getRuntime().maxMemory() – heap size
Fantom Apps - The Solution
VMRuntime
.getRuntime().setMinimumHeapSize(BIGGER_SIZE)
(how googers help them self with memory)

Or:
- Avoid operations that require threadpools.
    Control your background processes.
- Try to find out if you overuse strings since + is a
    very heavy duty operation!
- Use MemoryAnalyzer to find the “memory hoag”
Bitmaps and Graphics
Android 2.x does not work with bitmaps well

• VM does not load Bitmaps in heap,

• Bitmaps are immutable

• Matrix transformations are EXTREMELY risky
Bitmaps and Graphics
Repetitive problems

ERROR/AndroidRuntime(7906):
java.lang.OutOfMemoryError:
bitmap size exceeds VM budget
ERROR/AndroidRuntime(7906):
at
android.graphics.BitmapFactory.decodeFile(Bit
mapFactory.java:295)
Other Memory issues
This is actually caused by unclosed cursors and huge bitmaps
java.lang.RuntimeException: No memory in memObj at
android.database.CursorWindow.native_init at
android.database.CursorWindow.<init> at
android.database.CursorWindow.<init> at
android.database.CursorWindow$1.createFromParcel at
android.database.CursorWindow$1.createFromParcel at
android.content.ContentProviderNative.onTransact at
android.os.Binder.execTransact at
dalvik.system.NativeStart.run
The problem
You are stranded with a slow application.
• Memory is failing
• Application is Slow
• Sometimes it fails
• Sometimes it just “dissapears”
The tools of trade!


• TraceView
• Eclipse MAT
• DDMS system
TraceView
Eclipse MAT
DDMS console
Threads vs. Async Tasks
•   Async Task Queue Limit
•   Thread overrun
•   AsyncTaskEx
•   NeverEnding cursors
Again the notifyChange() method
This can sometimes wreak havoc.
An example (that happened to me):
I download news from a website, upon download I have
a list of 50 items. NotifyChange() is called 50 times!

Definition of an UGLY SCENARIO
The logging facility
Android Log is great, but People tend to
1. Overlog
2. Forget the logs
3. Concatenate a huge amount of strings
4. Leave logs in loops (for, while, do-while)
5. Add stupid tags
6. Offer the consumer private information
CONCLUSION…
It’s Hard


No, It’s not!
It’s fun!
It’s easy!           New
                   Employee
                              1 yr   2 yr   3 yr


It’s lucrative 
It’s cool!
You only have to :
1.   Be aware of the rules of engagement!
2.   Know your target
3.   Be weary of memory!
4.   Remember that it’s a VM
5.   Have Respect for the other platforms, and
     you just might learn something new…
Q&A




CONTACT ME AT :
STANOJKO.MARKOVIK@GMAIL.COM
HTTP://TWITTER.COM/SMARKOVIK
1 of 47

Recommended

Learn Adobe Photoshop Lightroom by
Learn Adobe Photoshop Lightroom Learn Adobe Photoshop Lightroom
Learn Adobe Photoshop Lightroom Travellingcamera
789 views15 slides
Design patterns in Java - Monitis 2017 by
Design patterns in Java - Monitis 2017Design patterns in Java - Monitis 2017
Design patterns in Java - Monitis 2017Arsen Gasparyan
816 views208 slides
Unbreaking Your Django Application by
Unbreaking Your Django ApplicationUnbreaking Your Django Application
Unbreaking Your Django ApplicationOSCON Byrum
22.2K views125 slides
Vulnerability, exploit to metasploit by
Vulnerability, exploit to metasploitVulnerability, exploit to metasploit
Vulnerability, exploit to metasploitTiago Henriques
2.6K views41 slides
Profiling tools and Android Performance patterns by
Profiling tools and Android Performance patternsProfiling tools and Android Performance patterns
Profiling tools and Android Performance patternsicemobile
1.6K views31 slides
Rust Programming Language by
Rust Programming LanguageRust Programming Language
Rust Programming LanguageJaeju Kim
8.5K views25 slides

More Related Content

Similar to The Good, the Bad and the Ugly things to do with android

Preventing Complexity in Game Programming by
Preventing Complexity in Game ProgrammingPreventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingYaser Zhian
698 views35 slides
Speeding up mobile web apps by
Speeding up mobile web appsSpeeding up mobile web apps
Speeding up mobile web appsIvano Malavolta
783 views46 slides
Spaghetti gate by
Spaghetti gateSpaghetti gate
Spaghetti gateJon Bachelor
774 views25 slides
2019 PHP Serbia - Boosting your performance with Blackfire by
2019 PHP Serbia - Boosting your performance with Blackfire2019 PHP Serbia - Boosting your performance with Blackfire
2019 PHP Serbia - Boosting your performance with BlackfireMarko Mitranić
36 views71 slides
Enterprise Strength Mobile JavaScript by
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptTroy Miles
11K views46 slides
Optimisation and performance in Android by
Optimisation and performance in AndroidOptimisation and performance in Android
Optimisation and performance in AndroidRakesh Jha
1.2K views127 slides

Similar to The Good, the Bad and the Ugly things to do with android(20)

Preventing Complexity in Game Programming by Yaser Zhian
Preventing Complexity in Game ProgrammingPreventing Complexity in Game Programming
Preventing Complexity in Game Programming
Yaser Zhian698 views
2019 PHP Serbia - Boosting your performance with Blackfire by Marko Mitranić
2019 PHP Serbia - Boosting your performance with Blackfire2019 PHP Serbia - Boosting your performance with Blackfire
2019 PHP Serbia - Boosting your performance with Blackfire
Marko Mitranić36 views
Enterprise Strength Mobile JavaScript by Troy Miles
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScript
Troy Miles11K views
Optimisation and performance in Android by Rakesh Jha
Optimisation and performance in AndroidOptimisation and performance in Android
Optimisation and performance in Android
Rakesh Jha1.2K views
Introduction to the intermediate Python - v1.1 by Andrei KUCHARAVY
Introduction to the intermediate Python - v1.1Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1
Andrei KUCHARAVY847 views
Fundamental Design Patterns.pptx by JUNSHIN8
Fundamental Design Patterns.pptxFundamental Design Patterns.pptx
Fundamental Design Patterns.pptx
JUNSHIN810 views
Postmortem of a uwp xaml application development by David Catuhe
Postmortem of a uwp xaml application developmentPostmortem of a uwp xaml application development
Postmortem of a uwp xaml application development
David Catuhe771 views
Austin Python Learners Meetup - Everything you need to know about programming... by Danny Mulligan
Austin Python Learners Meetup - Everything you need to know about programming...Austin Python Learners Meetup - Everything you need to know about programming...
Austin Python Learners Meetup - Everything you need to know about programming...
Danny Mulligan1.2K views
Beating Android Fragmentation, Brett Duncavage by Xamarin
Beating Android Fragmentation, Brett DuncavageBeating Android Fragmentation, Brett Duncavage
Beating Android Fragmentation, Brett Duncavage
Xamarin1.8K views
Optimizing mobile applications - Ian Dundore, Mark Harkness by ozlael ozlael
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
ozlael ozlael4.2K views
Orthogonality: A Strategy for Reusable Code by rsebbe
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
rsebbe1.6K views
Chelberg ptcuser 2010 by Clay Helberg
Chelberg ptcuser 2010Chelberg ptcuser 2010
Chelberg ptcuser 2010
Clay Helberg574 views
10 ways to improve your Android app performance by Boris Farber
10 ways to improve your Android app performance10 ways to improve your Android app performance
10 ways to improve your Android app performance
Boris Farber15.8K views
Performance optimization techniques for Java code by Attila Balazs
Performance optimization techniques for Java codePerformance optimization techniques for Java code
Performance optimization techniques for Java code
Attila Balazs10K views
Reading Notes : the practice of programming by Juggernaut Liu
Reading Notes : the practice of programmingReading Notes : the practice of programming
Reading Notes : the practice of programming
Juggernaut Liu714 views
(6) cpp numeric representation_exercises by Nico Ludwig
(6) cpp numeric representation_exercises(6) cpp numeric representation_exercises
(6) cpp numeric representation_exercises
Nico Ludwig141 views

Recently uploaded

Perth MeetUp November 2023 by
Perth MeetUp November 2023 Perth MeetUp November 2023
Perth MeetUp November 2023 Michael Price
15 views44 slides
Business Analyst Series 2023 - Week 3 Session 5 by
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5DianaGray10
209 views20 slides
PharoJS - Zürich Smalltalk Group Meetup November 2023 by
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023Noury Bouraqadi
120 views17 slides
Transcript: The Details of Description Techniques tips and tangents on altern... by
Transcript: The Details of Description Techniques tips and tangents on altern...Transcript: The Details of Description Techniques tips and tangents on altern...
Transcript: The Details of Description Techniques tips and tangents on altern...BookNet Canada
130 views15 slides
Voice Logger - Telephony Integration Solution at Aegis by
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at AegisNirmal Sharma
17 views1 slide

Recently uploaded(20)

Perth MeetUp November 2023 by Michael Price
Perth MeetUp November 2023 Perth MeetUp November 2023
Perth MeetUp November 2023
Michael Price15 views
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10209 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi120 views
Transcript: The Details of Description Techniques tips and tangents on altern... by BookNet Canada
Transcript: The Details of Description Techniques tips and tangents on altern...Transcript: The Details of Description Techniques tips and tangents on altern...
Transcript: The Details of Description Techniques tips and tangents on altern...
BookNet Canada130 views
Voice Logger - Telephony Integration Solution at Aegis by Nirmal Sharma
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at Aegis
Nirmal Sharma17 views
How the World's Leading Independent Automotive Distributor is Reinventing Its... by NUS-ISS
How the World's Leading Independent Automotive Distributor is Reinventing Its...How the World's Leading Independent Automotive Distributor is Reinventing Its...
How the World's Leading Independent Automotive Distributor is Reinventing Its...
NUS-ISS15 views
Data-centric AI and the convergence of data and model engineering: opportunit... by Paolo Missier
Data-centric AI and the convergence of data and model engineering:opportunit...Data-centric AI and the convergence of data and model engineering:opportunit...
Data-centric AI and the convergence of data and model engineering: opportunit...
Paolo Missier34 views
The details of description: Techniques, tips, and tangents on alternative tex... by BookNet Canada
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...
BookNet Canada121 views
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2216 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software225 views
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum... by NUS-ISS
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
NUS-ISS34 views
handbook for web 3 adoption.pdf by Liveplex
handbook for web 3 adoption.pdfhandbook for web 3 adoption.pdf
handbook for web 3 adoption.pdf
Liveplex19 views
SAP Automation Using Bar Code and FIORI.pdf by Virendra Rai, PMP
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdf
Empathic Computing: Delivering the Potential of the Metaverse by Mark Billinghurst
Empathic Computing: Delivering  the Potential of the MetaverseEmpathic Computing: Delivering  the Potential of the Metaverse
Empathic Computing: Delivering the Potential of the Metaverse
Mark Billinghurst470 views
Spesifikasi Lengkap ASUS Vivobook Go 14 by Dot Semarang
Spesifikasi Lengkap ASUS Vivobook Go 14Spesifikasi Lengkap ASUS Vivobook Go 14
Spesifikasi Lengkap ASUS Vivobook Go 14
Dot Semarang35 views

The Good, the Bad and the Ugly things to do with android

  • 1. The Good, The Bad, Mobile2Days and The Ugly… Things to do with Android Stanojko Markovik 03.11.2011@Java2Days
  • 2. Your presenter… • Speaks a few languages (Java, C++, Python…) • Currently works at the ARTEMIS R&D department at SudParis Telecom Institute • Worked with android from v1.1 both for app development and custom ROMs • Linux geek • JUGMK member
  • 7. What will we talk about?? • Good practices and the 1 proper way to do things • Bad things people tend 2 to do and how to evade… • The ugly things no one 3 wants to talk about.
  • 9. The standard stuff first • Always keep Clean and concise code • DRY KISS - Always • Be weary of memory usage • Try to use libraries as external JAR files. - modularity - easier development sloop • If you comment something out.. Erase it.. You will probably never use it again
  • 10. Android Specific stuff - UI • Android uses a modified version of the MVC patter, Views are made in XML. Populated by code • Android is aware of the display size. So use this, and have different graphics. For each size of the screen
  • 11. Android Specific stuff - UI • Try to utilize the 9patch drawables as much as possible Example 1 Example 2
  • 12. Android Specific stuff - UI • If the shapes are simple.. Write them in XML Sample Round shape definition in XML
  • 13. Android Specific stuff - Code • Differentiate the LinkedList from the ArrayList in the mobile world, it matters… • Android uses a Google re-written Java, so most of the standard java classes you use are “optimized”, optimizations have bugs . • Cleanup code before using it.. The Android compiler does not exclude unused classes. This will greatly reduce your application size
  • 14. Android Specific stuff - SDK • Always have a target SDK, and a target device. Maybe the code can be uniform and meant for all device, but the UI cannot. • Forget String-s use StringBuilders • Use a Debug condition for your Log statements. Remember that : logs concat strings and are NOISY! • Android has a GC, but System.gc() doesn’t work! Have it in mind…
  • 15. Android Specific stuff Visual Scaling • Try to get used to thinking in DIPs and SP. • A good developer always wraps his content! • Android has a GC, but System.gc() doesn’t work! Have it in mind…
  • 16. View.getTag() method This is the “hidden” pocket meant for the object to which the view is refering • Use it on buttons to hold a state, or reference • Use it with cursor adapters to hold an object or database ID • Use it with custom views to hold misc data for the extra data you need.
  • 17. notifyChange() method Very often you have to write applications that use adapters from databases or webservices. The notifyChange() method is very important for automatic update and/or content change. Whenever you insert/update any data in the source it is important to call this method to tell all the users to refresh or re-query their data.
  • 19. Developers tend to be lazy… • Respect The Activity Lifecycle
  • 20. Database Cursors • Database connections are often left open or half open - This wreaks havoc in the android heap and memory management, Never forget to cursor.close() - If this is hard, then either call the manageCursor to link the cursor to the activity lifecycle or use cursor helper.
  • 21. Use XML resources with care XML layouts are a very handy, but developers over or under use them very often. - Handle the system services (layoutInflater) - Inflate to combine layouts, much better and easier than writing it in code. - Don’t forget to recycle the Inflated layouts ! - Externalize ALL Strings to strings.xml - Use values for system configurations
  • 22. Don’t over nest “Lazy” developers tend to overuse the LinearLayout Instead of using RelativeLayout Eclipse Demo here…
  • 23. Cursor adapters and lists • Use relative layout for the list items • Use recyclable views and adapter • Load images in the backgroud Eclipse Demo here…
  • 24. Background and Services • Differentiate when to use binded and unbinded services. • Understand the onStartCommand() method and it’s return statement. • Differentiate threads and asynctasks • Never use Toast or Dialog from a service
  • 25. View Hierarchy Developers tend to create complex view hierarchies which are difficult for the GPU to render and refresh. Views should be simple and a better resolution is for the view hierarchy to be wide than tall. Use the HierarchyViewer tool to find the skeleton of your activity.
  • 29. ANR • Affected : Activity, Service, BroadcastReceiver • Reason : Lifecycle rules broken • Fix Run heavy processing outside of the main thread, use asynctask or another thread.
  • 30. Fantom Apps The error Sample LogCat output.
  • 31. Fantom Apps - The Cause In general this is a very difficult error to trace - No Java StackTrace - No Error screen However if you look at the debug dump, you can see That the heap is being overflowed. To check Runtime.getRuntime().maxMemory() – heap size
  • 32. Fantom Apps - The Solution VMRuntime .getRuntime().setMinimumHeapSize(BIGGER_SIZE) (how googers help them self with memory) Or: - Avoid operations that require threadpools. Control your background processes. - Try to find out if you overuse strings since + is a very heavy duty operation! - Use MemoryAnalyzer to find the “memory hoag”
  • 33. Bitmaps and Graphics Android 2.x does not work with bitmaps well • VM does not load Bitmaps in heap, • Bitmaps are immutable • Matrix transformations are EXTREMELY risky
  • 34. Bitmaps and Graphics Repetitive problems ERROR/AndroidRuntime(7906): java.lang.OutOfMemoryError: bitmap size exceeds VM budget ERROR/AndroidRuntime(7906): at android.graphics.BitmapFactory.decodeFile(Bit mapFactory.java:295)
  • 35. Other Memory issues This is actually caused by unclosed cursors and huge bitmaps java.lang.RuntimeException: No memory in memObj at android.database.CursorWindow.native_init at android.database.CursorWindow.<init> at android.database.CursorWindow.<init> at android.database.CursorWindow$1.createFromParcel at android.database.CursorWindow$1.createFromParcel at android.content.ContentProviderNative.onTransact at android.os.Binder.execTransact at dalvik.system.NativeStart.run
  • 36. The problem You are stranded with a slow application. • Memory is failing • Application is Slow • Sometimes it fails • Sometimes it just “dissapears”
  • 37. The tools of trade! • TraceView • Eclipse MAT • DDMS system
  • 41. Threads vs. Async Tasks • Async Task Queue Limit • Thread overrun • AsyncTaskEx • NeverEnding cursors
  • 42. Again the notifyChange() method This can sometimes wreak havoc. An example (that happened to me): I download news from a website, upon download I have a list of 50 items. NotifyChange() is called 50 times! Definition of an UGLY SCENARIO
  • 43. The logging facility Android Log is great, but People tend to 1. Overlog 2. Forget the logs 3. Concatenate a huge amount of strings 4. Leave logs in loops (for, while, do-while) 5. Add stupid tags 6. Offer the consumer private information
  • 45. It’s Hard No, It’s not! It’s fun! It’s easy! New Employee 1 yr 2 yr 3 yr It’s lucrative  It’s cool!
  • 46. You only have to : 1. Be aware of the rules of engagement! 2. Know your target 3. Be weary of memory! 4. Remember that it’s a VM 5. Have Respect for the other platforms, and you just might learn something new…
  • 47. Q&A CONTACT ME AT : STANOJKO.MARKOVIK@GMAIL.COM HTTP://TWITTER.COM/SMARKOVIK