際際滷

際際滷Share a Scribd company logo
Samsung Developer Office Hours NYC



     X Means Y:
  Interpreting the
 Development Tools
            Copyright 息 2012CommonsWare, LLC
01-03 01:32:11.986: E/AndroidRuntime(17991):
Caused by: android.os.NetworkOnMainThreadException




                  Copyright 息 2012CommonsWare, LLC
StrictMode
   Reports obvious long-running stuff on main
    application thread
   Network I/O automatically reported on
    Android 3.0+
       Do not disable the error  fix the problem!
       Opt-in for Android 2.3
            Can also configure to report disk I/O on main
             thread, failure to close files/databases/cursors,
             etc.           Copyright 息 2012CommonsWare, LLC
Copyright 息 2012CommonsWare, LLC
06-29 23:11:17.796: I/Choreographer(691):
Skipped 18 frames! The application may be doing
too much work on its main thread.




                  Copyright 息 2012CommonsWare, LLC
Choreographer
   Information Message in LogCat
       Skipped N frames * 16ms = amount of time
        you took on main application thread
       The more frames skipped, the more likely it is
        the user will notice
            UI frozen and not responsive
            Animation/scrolling hiccups
       Android 4.1+

                          Copyright 息 2012CommonsWare, LLC
Project Butter
   UI Updates @ 60 frames/second
   Objective: smoother UI updates
       Especially animations
   Transparent to developers
       No code changes to opt into Butter effects
   Google I/O 2012: For Butter or Worse

                      Copyright 息 2012CommonsWare, LLC
Project Butter Ramifications
   Only ~16ms Per Frame
       Your code on the main application thread
       Framework code
       Other interruptions (e.g., background process)
   Net: Get Off the Main Application Thread!
       Anything taking more than a few milliseconds
        needs to move to background thread or be
        executed incrementally
                      Copyright 息 2012CommonsWare, LLC
12-12 08:56:20.746: E/AndroidRuntime(1570):
java.lang.RuntimeException: Can't create handler inside
thread that has not called Looper.prepare()




                    Copyright 息 2012CommonsWare, LLC
Looper and Handler
   Queuing mechanism
   Used by main application thread
   Error results from trying to do wrong thing on
    background thread
       setContentView()
       requestLocationUpdates()
   HandlerThread
                    Copyright 息 2012CommonsWare, LLC
java.lang.StackOverflowError
  at android.widget.TextView.onDraw(TextView.java:4329)
  at android.view.View.draw(View.java:6993)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
  at android.view.View.draw(View.java:6996)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
  at android.view.View.draw(View.java:6996)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
  at android.view.View.draw(View.java:6996)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
  at android.view.View.draw(View.java:6996)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
.
.
.
                      Copyright 息 2012CommonsWare, LLC
StackOverflowError
   Your code?
       Too-deep recursion
   View/ViewGroup code?
       Too-complex UI: nested containers
       8KB stack space on main application thread




                      Copyright 息 2012CommonsWare, LLC
StackOverflowError
   Diagnostics
       Open UI in emulator
            Or device if you embed ViewServer in it
       Run Hierarchy View
            Eclipse perspective or via monitor
       Count depth
       Find stuff safe to eliminate
            Containers with only one child
                           Copyright 息 2012CommonsWare, LLC
07-13 10:42:23.820: E/AndroidRuntime(2065):
java.lang.OutOfMemoryError




                Copyright 息 2012CommonsWare, LLC
OutOfMemoryError
   Limited heap sizes
       16-64MB, depending on OS version and device
        capabilities
   Non-compacting garbage collector
       Cannot allocate a block big enough for your
        request
   Primary culprit: bitmaps
       1080p image = ~8MB
                      Copyright 息 2012CommonsWare, LLC
OutOfMemoryError
   Diagnostics
       MAT
           Dump heap (HPROF) using Debug or DDMS
           Load into MAT (Eclipse plug-in or standalone)
           Hunt for culprits
       adb shell dumpsys meminfo
           Lots of low-level information
           Difficult to accurately interpret

                          Copyright 息 2012CommonsWare, LLC
OutOfMemoryError
   BitmapFactory.Options
       inSampleSize: downsample for less heap use
       inPurgeable/inInputShareable: for sharing
        backing data for mutations of common ancestor
        bitmap
       inBitmap: for reusing existing Bitmap buffer
            Must be of the same dimensions and bit depth
            Maintain your own object pools versus
             fragmenting your heap
                          Copyright 息 2012CommonsWare, LLC
I/DEBUG   (18110):   *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (18110):   Build fingerprint: 'MOTO_O2DE/umts_sholes/umts_sholes/sholes:2.1-...
I/DEBUG   (18110):   pid: 23912, tid: 23913 >>> com.example.test <<<
I/DEBUG   (18110):   signal 11 (SIGSEGV), fault addr 0000000c
I/DEBUG   (18110):    r0 00140120 r1 00000048 r2 00000000 r3 00140168
I/DEBUG   (18110):    r4 afe3ae08 r5 00000006 r6 00140158 r7 0000a000
I/DEBUG   (18110):    r8 100ffcf8 r9 4185eef8 10 4185eee0 fp 001243b0
I/DEBUG   (18110):    ip 00000000 sp 100ffc50 lr afe0f130 pc afe0aeec cpsr 80000070
I/DEBUG   (18110):            #00 pc 0000aeec /system/lib/libc.so
I/DEBUG   (18110):            #01 pc 000008e6 /system/lib/libstdc++.so
I/DEBUG   (18110):            #02 pc 00014124 /system/lib/libutils.so
I/DEBUG   (18110):            #03 pc 0001423c /system/lib/libutils.so
I/DEBUG   (18110):            #04 pc 0001af28 /system/lib/libbinder.so
I/DEBUG   (18110):            #05 pc 0001ba20 /system/lib/libbinder.so
I/DEBUG   (18110):            #06 pc 0001bcd6 /system/lib/libbinder.so
I/DEBUG   (18110):            #07 pc 00014236 /system/lib/libutils.so
I/DEBUG   (18110):            #08 pc 000293a6 /system/lib/libandroid_runtime.so
I/DEBUG   (18110):            #09 pc 000313ca /system/lib/libandroid_runtime.so
I/DEBUG   (18110):            #10 pc 0000ecb4 /system/lib/libdvm.so
I/DEBUG   (18110):            #11 pc 00038838 /system/lib/libdvm.so
I/DEBUG   (18110):            #12 pc 000139b8 /system/lib/libdvm.so
I/DEBUG   (18110):            #13 pc 00019338 /system/lib/libdvm.so
I/DEBUG   (18110):            #14 pc 00018804 /system/lib/libdvm.so
.
.
.
                                  Copyright 息 2012CommonsWare, LLC
SIGSEGV
   Doing NDK development?
       Might be core dump from your code
   Repeatable across devices, or on Nexus?
       Probably a bug in Android
   Only happens on certain ROM?
       Probably a bug in the ROM mod


                      Copyright 息 2012CommonsWare, LLC
Getting Help
   StackOverflow
       android tag
   Google Hangouts by Android Developer
    Support
       QR code for YouTube archives
   www.andglobe.com
       Q&A sites, organized by language

                      Copyright 息 2012CommonsWare, LLC
Speaker Contact
    Information




       Copyright 息 2012CommonsWare, LLC

More Related Content

Viewers also liked (6)

PDF
XIV semana del Libro en Aguimes
Nuestras Islas Canarias
PDF
Xilacina epidural
Christian Quinteros
PDF
X dedic marketplace_eng
Andrey Apuhtin
PDF
Xi Epsilon September 2009 E Newsletter
pjcorr
PPSX
Xedapp demo - Excel sheet updates using Xedapp
Xedapp
PDF
Xdd Evidence Storage
carriejo
XIV semana del Libro en Aguimes
Nuestras Islas Canarias
Xilacina epidural
Christian Quinteros
X dedic marketplace_eng
Andrey Apuhtin
Xi Epsilon September 2009 E Newsletter
pjcorr
Xedapp demo - Excel sheet updates using Xedapp
Xedapp
Xdd Evidence Storage
carriejo

Similar to X Means Y (20)

PDF
Android Development Tutorial V3
Diego Torres Milano
PDF
Android Platform Debugging & Development
Qualcomm Developer Network
PDF
Securing User Data with SQLCipher
CommonsWare
PPTX
KrankGeek November 2021 - Best practices in Electron-based desktop developmen...
Arnaud BUDKIEWICZ
PDF
Inside Android's UI at AnDevCon VI
Opersys inc.
PPTX
GDG Devfest 2016 session on Android N
Imam Raza
PDF
Android Security: Defending Your Users
CommonsWare
PDF
Inside Android's UI at AnDevCon V
Opersys inc.
PDF
Android Platform Debugging and Development at ABS 2014
Opersys inc.
PDF
What's New in Jelly Bean
CommonsWare
PDF
Is Android the New King of Embedded OSes at Embedded World 2014
Opersys inc.
PDF
Droidcon uk2012 androvm
dfages
PDF
Android Platform Debugging and Development at ELCE 2013
Opersys inc.
PDF
Android 3.0 Portland Java User Group 2011-03-15
sullis
PPTX
Codename one
Software Infrastructure
PDF
Customizing Android's UI
Opersys inc.
PPTX
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
Fabrice Bernhard
PPT
Building Multi-Channel Data-Aware Applications
cjolif
PDF
Customizing Android's UI
Opersys inc.
KEY
Android a brief intro
Kieran Gutteridge
Android Development Tutorial V3
Diego Torres Milano
Android Platform Debugging & Development
Qualcomm Developer Network
Securing User Data with SQLCipher
CommonsWare
KrankGeek November 2021 - Best practices in Electron-based desktop developmen...
Arnaud BUDKIEWICZ
Inside Android's UI at AnDevCon VI
Opersys inc.
GDG Devfest 2016 session on Android N
Imam Raza
Android Security: Defending Your Users
CommonsWare
Inside Android's UI at AnDevCon V
Opersys inc.
Android Platform Debugging and Development at ABS 2014
Opersys inc.
What's New in Jelly Bean
CommonsWare
Is Android the New King of Embedded OSes at Embedded World 2014
Opersys inc.
Droidcon uk2012 androvm
dfages
Android Platform Debugging and Development at ELCE 2013
Opersys inc.
Android 3.0 Portland Java User Group 2011-03-15
sullis
Customizing Android's UI
Opersys inc.
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
Fabrice Bernhard
Building Multi-Channel Data-Aware Applications
cjolif
Customizing Android's UI
Opersys inc.
Android a brief intro
Kieran Gutteridge
Ad

More from CommonsWare (20)

PDF
Gradle and Your Android Wearable Projects
CommonsWare
PDF
Getting Android Developers for Your Wearables
CommonsWare
PDF
When Microwatts Are Precious: Battery Tips for Wearable Apps
CommonsWare
PDF
The Action Bar: Front to Back
CommonsWare
PDF
Secondary Screen Support Using DisplayManager
CommonsWare
PDF
Mastering the Master Detail Pattern
CommonsWare
PDF
Not Quite As Painful Threading
CommonsWare
PDF
Android Development: The 20,000-Foot View
CommonsWare
PDF
Maps V2... And You!
CommonsWare
PDF
A Deep Dive Into ViewPager
CommonsWare
PDF
Second-Screen Support in Android 4.2
CommonsWare
PDF
Integrate Android Apps and Web Apps
CommonsWare
PDF
From Android to the Mobile Web
CommonsWare
PDF
The Wonderful World of Wearables
CommonsWare
PDF
Beaming Data to Devices with NFC
CommonsWare
PDF
Making Money at Mobile: 60 Business Models
CommonsWare
PDF
AppsWorld Keynote
CommonsWare
PDF
App Integration (Revised and Updated)
CommonsWare
PDF
Rich Text Editing and Beyond
CommonsWare
PDF
App integration: Strategies and Tactics
CommonsWare
Gradle and Your Android Wearable Projects
CommonsWare
Getting Android Developers for Your Wearables
CommonsWare
When Microwatts Are Precious: Battery Tips for Wearable Apps
CommonsWare
The Action Bar: Front to Back
CommonsWare
Secondary Screen Support Using DisplayManager
CommonsWare
Mastering the Master Detail Pattern
CommonsWare
Not Quite As Painful Threading
CommonsWare
Android Development: The 20,000-Foot View
CommonsWare
Maps V2... And You!
CommonsWare
A Deep Dive Into ViewPager
CommonsWare
Second-Screen Support in Android 4.2
CommonsWare
Integrate Android Apps and Web Apps
CommonsWare
From Android to the Mobile Web
CommonsWare
The Wonderful World of Wearables
CommonsWare
Beaming Data to Devices with NFC
CommonsWare
Making Money at Mobile: 60 Business Models
CommonsWare
AppsWorld Keynote
CommonsWare
App Integration (Revised and Updated)
CommonsWare
Rich Text Editing and Beyond
CommonsWare
App integration: Strategies and Tactics
CommonsWare
Ad

X Means Y

  • 1. Samsung Developer Office Hours NYC X Means Y: Interpreting the Development Tools Copyright 息 2012CommonsWare, LLC
  • 2. 01-03 01:32:11.986: E/AndroidRuntime(17991): Caused by: android.os.NetworkOnMainThreadException Copyright 息 2012CommonsWare, LLC
  • 3. StrictMode Reports obvious long-running stuff on main application thread Network I/O automatically reported on Android 3.0+ Do not disable the error fix the problem! Opt-in for Android 2.3 Can also configure to report disk I/O on main thread, failure to close files/databases/cursors, etc. Copyright 息 2012CommonsWare, LLC
  • 5. 06-29 23:11:17.796: I/Choreographer(691): Skipped 18 frames! The application may be doing too much work on its main thread. Copyright 息 2012CommonsWare, LLC
  • 6. Choreographer Information Message in LogCat Skipped N frames * 16ms = amount of time you took on main application thread The more frames skipped, the more likely it is the user will notice UI frozen and not responsive Animation/scrolling hiccups Android 4.1+ Copyright 息 2012CommonsWare, LLC
  • 7. Project Butter UI Updates @ 60 frames/second Objective: smoother UI updates Especially animations Transparent to developers No code changes to opt into Butter effects Google I/O 2012: For Butter or Worse Copyright 息 2012CommonsWare, LLC
  • 8. Project Butter Ramifications Only ~16ms Per Frame Your code on the main application thread Framework code Other interruptions (e.g., background process) Net: Get Off the Main Application Thread! Anything taking more than a few milliseconds needs to move to background thread or be executed incrementally Copyright 息 2012CommonsWare, LLC
  • 9. 12-12 08:56:20.746: E/AndroidRuntime(1570): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() Copyright 息 2012CommonsWare, LLC
  • 10. Looper and Handler Queuing mechanism Used by main application thread Error results from trying to do wrong thing on background thread setContentView() requestLocationUpdates() HandlerThread Copyright 息 2012CommonsWare, LLC
  • 11. java.lang.StackOverflowError at android.widget.TextView.onDraw(TextView.java:4329) at android.view.View.draw(View.java:6993) at android.view.ViewGroup.drawChild(ViewGroup.java:1732) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459) at android.view.View.draw(View.java:6996) at android.view.ViewGroup.drawChild(ViewGroup.java:1732) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459) at android.view.View.draw(View.java:6996) at android.view.ViewGroup.drawChild(ViewGroup.java:1732) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459) at android.view.View.draw(View.java:6996) at android.view.ViewGroup.drawChild(ViewGroup.java:1732) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459) at android.view.View.draw(View.java:6996) at android.view.ViewGroup.drawChild(ViewGroup.java:1732) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459) . . . Copyright 息 2012CommonsWare, LLC
  • 12. StackOverflowError Your code? Too-deep recursion View/ViewGroup code? Too-complex UI: nested containers 8KB stack space on main application thread Copyright 息 2012CommonsWare, LLC
  • 13. StackOverflowError Diagnostics Open UI in emulator Or device if you embed ViewServer in it Run Hierarchy View Eclipse perspective or via monitor Count depth Find stuff safe to eliminate Containers with only one child Copyright 息 2012CommonsWare, LLC
  • 15. OutOfMemoryError Limited heap sizes 16-64MB, depending on OS version and device capabilities Non-compacting garbage collector Cannot allocate a block big enough for your request Primary culprit: bitmaps 1080p image = ~8MB Copyright 息 2012CommonsWare, LLC
  • 16. OutOfMemoryError Diagnostics MAT Dump heap (HPROF) using Debug or DDMS Load into MAT (Eclipse plug-in or standalone) Hunt for culprits adb shell dumpsys meminfo Lots of low-level information Difficult to accurately interpret Copyright 息 2012CommonsWare, LLC
  • 17. OutOfMemoryError BitmapFactory.Options inSampleSize: downsample for less heap use inPurgeable/inInputShareable: for sharing backing data for mutations of common ancestor bitmap inBitmap: for reusing existing Bitmap buffer Must be of the same dimensions and bit depth Maintain your own object pools versus fragmenting your heap Copyright 息 2012CommonsWare, LLC
  • 18. I/DEBUG (18110): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG (18110): Build fingerprint: 'MOTO_O2DE/umts_sholes/umts_sholes/sholes:2.1-... I/DEBUG (18110): pid: 23912, tid: 23913 >>> com.example.test <<< I/DEBUG (18110): signal 11 (SIGSEGV), fault addr 0000000c I/DEBUG (18110): r0 00140120 r1 00000048 r2 00000000 r3 00140168 I/DEBUG (18110): r4 afe3ae08 r5 00000006 r6 00140158 r7 0000a000 I/DEBUG (18110): r8 100ffcf8 r9 4185eef8 10 4185eee0 fp 001243b0 I/DEBUG (18110): ip 00000000 sp 100ffc50 lr afe0f130 pc afe0aeec cpsr 80000070 I/DEBUG (18110): #00 pc 0000aeec /system/lib/libc.so I/DEBUG (18110): #01 pc 000008e6 /system/lib/libstdc++.so I/DEBUG (18110): #02 pc 00014124 /system/lib/libutils.so I/DEBUG (18110): #03 pc 0001423c /system/lib/libutils.so I/DEBUG (18110): #04 pc 0001af28 /system/lib/libbinder.so I/DEBUG (18110): #05 pc 0001ba20 /system/lib/libbinder.so I/DEBUG (18110): #06 pc 0001bcd6 /system/lib/libbinder.so I/DEBUG (18110): #07 pc 00014236 /system/lib/libutils.so I/DEBUG (18110): #08 pc 000293a6 /system/lib/libandroid_runtime.so I/DEBUG (18110): #09 pc 000313ca /system/lib/libandroid_runtime.so I/DEBUG (18110): #10 pc 0000ecb4 /system/lib/libdvm.so I/DEBUG (18110): #11 pc 00038838 /system/lib/libdvm.so I/DEBUG (18110): #12 pc 000139b8 /system/lib/libdvm.so I/DEBUG (18110): #13 pc 00019338 /system/lib/libdvm.so I/DEBUG (18110): #14 pc 00018804 /system/lib/libdvm.so . . . Copyright 息 2012CommonsWare, LLC
  • 19. SIGSEGV Doing NDK development? Might be core dump from your code Repeatable across devices, or on Nexus? Probably a bug in Android Only happens on certain ROM? Probably a bug in the ROM mod Copyright 息 2012CommonsWare, LLC
  • 20. Getting Help StackOverflow android tag Google Hangouts by Android Developer Support QR code for YouTube archives www.andglobe.com Q&A sites, organized by language Copyright 息 2012CommonsWare, LLC
  • 21. Speaker Contact Information Copyright 息 2012CommonsWare, LLC