Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android View-to-image Conversion for Message Ca...

Android View-to-image Conversion for Message Capturing

LINE DevDay 2020

November 26, 2020
Tweet

More Decks by LINE DevDay 2020

Other Decks in Technology

Transcript

  1. How Does it Work? Behind The Scenes Step 1 Prepare

    views Step 3 Repeat step 1 & 2 Step 2 Convert views to bitmaps
  2. Step 1 - Prepare Views Step 1 Prepare views Step

    3 Repeat step 1 & 2 Step 2 Convert views to bitmaps › Go through view drawing process › Don’t display views › Call View.measure() and View.layout() ourselves › Display views › Let system do the work Behind The Scenes
  3. Step 1 - Prepare Views Don’t Display Views private fun

    prepareView(parentView: View, adapterPosition: Int) { // Create view val view = listView.adapter.getView(adapterPosition, null, null) // Measure and layout view val specWidth = View.MeasureSpec.makeMeasureSpec(parentView.width, View.MeasureSpec.EXACTLY) val specHeight = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) view.measure(specWidth, specHeight) view.layout(0, 0, view.measuredWidth, view.measuredHeight) }
  4. Step 1 - Prepare Views Don’t Display Views private fun

    prepareView(parentView: View, adapterPosition: Int) { // Create view val view = listView.adapter.getView(adapterPosition, null, null) // Measure and layout view val specWidth = View.MeasureSpec.makeMeasureSpec(parentView.width, View.MeasureSpec.EXACTLY) val specHeight = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) view.measure(specWidth, specHeight) view.layout(0, 0, view.measuredWidth, view.measuredHeight) }
  5. Step 2 - Convert Views to Bitmaps Step 2 Convert

    views to bitmaps Step 3 Repeat step 1 & 2 Step 2 Convert views to bitmaps › Memory usage › Saving and recycling Behind The Scenes
  6. Step 2 - Convert Views to Bitmaps Memory Usage height

    * width * 4 bytes (ARGB_8888: 4 bytes/ pixel) bitmap memory storage Android 3.0 ~ 7.1: in Java heap Android 8: in native heap
  7. Step 2 - Convert Views to Bitmaps Saving and Recycling

    1st bitmap page height limit 3rd bitmap 2nd bitmap
  8. Step 2 - Convert Views to Bitmaps Saving and Recycling

    long bitmap stored on disk and recycled 1st bitmap
  9. Step 3 - Repeat Step 1 & 2 Step 3

    Repeat step 1 & 2 Step 3 Repeat step 1 & 2 Step 2 Convert views to bitmaps › Message Pagination › Save memory › Avoid exception or crashing Behind The Scenes
  10. › One page at a time › Pages have overlapping

    messages › Auto preloading before end of page
  11. › One page at a time › Pages have overlapping

    messages › Auto preloading before end of page Page 1 Of Messages
  12. › One page has 15 messages › Pages have overlapping

    messages › Auto preloading before end of page Page 1 Of Messages
  13. › One page has 15 messages › Pages have overlapping

    messages › Auto preloading before end of page Page 1 Of Messages Page 2 Of Messages
  14. › One page has 15 messages › Pages have 8

    overlapping messages › Auto preloading before end of page Page 1 Of Messages Page 2 Of Messages
  15. › One page has 15 messages › Pages have 8

    overlapping messages › Auto preloading before end of page Page 1 Of Messages Page 2 Of Messages › Auto pre-load next page › Auto pre-load next page
  16. › One page has 15 messages › Pages have 8

    overlapping messages › Auto preloading is 3rd-to-last message Page 1 Of Messages Page 2 Of Messages › Auto pre-load next page › Auto pre-load next page
  17. Step 1 Prepare views Convert views to bitmaps Step 3

    Step 2 Repeat step 1 & 2 › View drawing process › Memory usage › Saving and recycling › Message pagination