SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
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

Contenu connexe

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

Optimisation and performance in Android
Optimisation and performance in AndroidOptimisation and performance in Android
Optimisation and performance in Android
Rakesh Jha
 
Beating Android Fragmentation, Brett Duncavage
Beating Android Fragmentation, Brett DuncavageBeating Android Fragmentation, Brett Duncavage
Beating Android Fragmentation, Brett Duncavage
Xamarin
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
rsebbe
 
Chelberg ptcuser 2010
Chelberg ptcuser 2010Chelberg ptcuser 2010
Chelberg ptcuser 2010
Clay Helberg
 

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

Preventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingPreventing Complexity in Game Programming
Preventing Complexity in Game Programming
 
Speeding up mobile web apps
Speeding up mobile web appsSpeeding up mobile web apps
Speeding up mobile web apps
 
Spaghetti gate
Spaghetti gateSpaghetti gate
Spaghetti gate
 
2019 PHP Serbia - Boosting your performance with Blackfire
2019 PHP Serbia - Boosting your performance with Blackfire2019 PHP Serbia - Boosting your performance with Blackfire
2019 PHP Serbia - Boosting your performance with Blackfire
 
Enterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScript
 
Optimisation and performance in Android
Optimisation and performance in AndroidOptimisation and performance in Android
Optimisation and performance in Android
 
iOS App performance - Things to take care
iOS App performance - Things to take careiOS App performance - Things to take care
iOS App performance - Things to take care
 
Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1
 
Fundamental Design Patterns.pptx
Fundamental Design Patterns.pptxFundamental Design Patterns.pptx
Fundamental Design Patterns.pptx
 
Postmortem of a uwp xaml application development
Postmortem of a uwp xaml application developmentPostmortem of a uwp xaml application development
Postmortem of a uwp xaml application development
 
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...
Austin Python Learners Meetup - Everything you need to know about programming...
 
Beating Android Fragmentation, Brett Duncavage
Beating Android Fragmentation, Brett DuncavageBeating Android Fragmentation, Brett Duncavage
Beating Android Fragmentation, Brett Duncavage
 
0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
 
Chelberg ptcuser 2010
Chelberg ptcuser 2010Chelberg ptcuser 2010
Chelberg ptcuser 2010
 
10 ways to improve your Android app performance
10 ways to improve your Android app performance10 ways to improve your Android app performance
10 ways to improve your Android app performance
 
Performance optimization techniques for Java code
Performance optimization techniques for Java codePerformance optimization techniques for Java code
Performance optimization techniques for Java code
 
Reading Notes : the practice of programming
Reading Notes : the practice of programmingReading Notes : the practice of programming
Reading Notes : the practice of programming
 
(6) cpp numeric representation_exercises
(6) cpp numeric representation_exercises(6) cpp numeric representation_exercises
(6) cpp numeric representation_exercises
 

Dernier

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
giselly40
 
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
vu2urc
 

Dernier (20)

Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
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?
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
[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
 
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
 
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...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

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