X Means Y

771 views

Published on

from the Samsung Developer Office Hours NYC

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
771
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

X Means Y

  1. 1. Samsung Developer Office Hours NYC X Means Y: Interpreting the Development Tools Copyright © 2012CommonsWare, LLC
  2. 2. 01-03 01:32:11.986: E/AndroidRuntime(17991):Caused by: android.os.NetworkOnMainThreadException Copyright © 2012CommonsWare, LLC
  3. 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
  4. 4. Copyright © 2012CommonsWare, LLC
  5. 5. 06-29 23:11:17.796: I/Choreographer(691):Skipped 18 frames! The application may be doingtoo much work on its main thread. Copyright © 2012CommonsWare, LLC
  6. 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. 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. 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. 9. 12-12 08:56:20.746: E/AndroidRuntime(1570):java.lang.RuntimeException: Cant create handler insidethread that has not called Looper.prepare() Copyright © 2012CommonsWare, LLC
  10. 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. 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. 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. 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
  14. 14. 07-13 10:42:23.820: E/AndroidRuntime(2065):java.lang.OutOfMemoryError Copyright © 2012CommonsWare, LLC
  15. 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. 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. 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. 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 0000000cI/DEBUG (18110): r0 00140120 r1 00000048 r2 00000000 r3 00140168I/DEBUG (18110): r4 afe3ae08 r5 00000006 r6 00140158 r7 0000a000I/DEBUG (18110): r8 100ffcf8 r9 4185eef8 10 4185eee0 fp 001243b0I/DEBUG (18110): ip 00000000 sp 100ffc50 lr afe0f130 pc afe0aeec cpsr 80000070I/DEBUG (18110): #00 pc 0000aeec /system/lib/libc.soI/DEBUG (18110): #01 pc 000008e6 /system/lib/libstdc++.soI/DEBUG (18110): #02 pc 00014124 /system/lib/libutils.soI/DEBUG (18110): #03 pc 0001423c /system/lib/libutils.soI/DEBUG (18110): #04 pc 0001af28 /system/lib/libbinder.soI/DEBUG (18110): #05 pc 0001ba20 /system/lib/libbinder.soI/DEBUG (18110): #06 pc 0001bcd6 /system/lib/libbinder.soI/DEBUG (18110): #07 pc 00014236 /system/lib/libutils.soI/DEBUG (18110): #08 pc 000293a6 /system/lib/libandroid_runtime.soI/DEBUG (18110): #09 pc 000313ca /system/lib/libandroid_runtime.soI/DEBUG (18110): #10 pc 0000ecb4 /system/lib/libdvm.soI/DEBUG (18110): #11 pc 00038838 /system/lib/libdvm.soI/DEBUG (18110): #12 pc 000139b8 /system/lib/libdvm.soI/DEBUG (18110): #13 pc 00019338 /system/lib/libdvm.soI/DEBUG (18110): #14 pc 00018804 /system/lib/libdvm.so... Copyright © 2012CommonsWare, LLC
  19. 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. 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. 21. Speaker Contact Information Copyright © 2012CommonsWare, LLC

×