Tips and tricks to attack memory problem in android programming

4,182 views

Published on

Published in: Technology, Education
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,182
On SlideShare
0
From Embeds
0
Number of Embeds
31
Actions
Shares
0
Downloads
113
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • Phầnthứnhất: chúng ta sẽtìmhiểutổngquátvềbộnhớtrong Android, tạisaotronglậptrìnhcho di động, vàtronglậptrìnhtrong Android lại hay xảyracácvấnđềvềbộnhớPhầnthứhai: Chúng ta sẽcùngnhaugiảiphẫuđốitượng Android Bitmap, đốitượngdùngđểhiểnthịhìnhảnhtrong Android. Thườngthì 80-90% vấnđềvềbộnhớsẽcóliênquanđếnđốitượngnày.Phần thứ ba: Mìnhsẽnóivềmộtlỗiphổbiếnvềbộnhớ, đólàlỗi leak memory. Sẽcómộtvàivídụ demos vềlỗi leak mem, cáchpháthiệncũngnhưlàcácgiảipháp
  • Câuhỏicơbản, ngồi ở đâychứngtỏđãtừngbịThường hay bịvấnđềvềbộnhớkhi decode vàthaotáctrênhìnhảnhnhư copy, xoaychẳnghạn.Tìnhhuốngthườnggặp: tạomộtứngdụngvàmuốntrangtrímộtvàihìnhảnhđểứngdụngđẹphơn -> Search trênStackOverflowvàtìmđượcvài thread hướngdẫnlàphảidùngImageViewvàBitmapFactoryđể decode ảnhthànhđốitượng bitmap vàgắnvàoImageViewDecode mộtvàihìnhđầukhôngcóvấnđềgì, nhưngkhichươngtrìnhchạymộtthờigianchúng ta bắtđầugặpvấnđềvềbộnhớ. Thườngthìsẽgặplỗinày.Cácbạnbắtđầutìmhiểuđểgiảiquyếtlỗinày. Ởnhữnggiaiđoạnđầuthìcácbạnsẽcảmthấykhálàứcchếkhimàgiảiquyếtvấnđềbộnhớnày, đặcbiệtlàtrêncácmáyyếuchỉcó 16MB heap.
  • - Cuối slide nóithêmvề try/catch khioutmem
  • -Giảithíchvề memory leak từsơđồ Mark & Sweep.
  • Tips and tricks to attack memory problem in android programming

    1. 1. Tips and Tricks to attack memory problem in Android Programming Phạm Cao Trí – tripc@vng.com.vn Lead Engineer – Zalo team – Zing
    2. 2. Agenda • 1. Memory problems: Why? • 2. Android Bitmaps: A closer look and some tips • 3. Memory leaking: Demos, Detection methods and Solutions.
    3. 3. 1. Memory problems: Why?
    4. 4. 1.1. Memory problem: Why? • Limited heap size: 16MB, 32MB, 64MB,.. • Usually in decoding or manipulating bitmaps. • Painful in solving memory problem for low-end devices
    5. 5. 2. Android Bitmaps: A closer look and some tips
    6. 6. 2.1. Android Bitmaps • Java object • Decode in native via Skia library (SkBitmap) • Allocation: • Pre Honeycomb (< 3.0): Native heap but “report” size to Dalvik VM. • Honeycomb and beyond (>= 3.0): VM/Java heap
    7. 7. 2.1. Android Bitmaps (con’t) • BitmapFactory.java: decodeResource ->.. -> nativeDecodeAsset • BitmapFactory.cpp: nativeDecodeAsset -> doDecode
    8. 8. 2.1. Android Bitmaps (con’t) • Pixel allocation policy lies within Graphics.cpp:
    9. 9. 2.1. Android Bitmaps (con’t) • Graphics.cpp: createBitmap -> Bitmap.java: Bitmap constructor • Pre-Honeycomb (< 3.0): • Honeycomb and beyond (>= 3.0):
    10. 10. 2.1. Android Bitmaps (con’t) • Pre-Gingerbread GC (< 2.3): • Stop all app’s threads – not stop all applications • Full heap collection • Pause times often > 100ms • Gingerbread and beyond (>= 2.3): • Mostly concurrent • Partial collections • Pause times usually < 5ms • Garbage collection in Android does no compacting.
    11. 11. 2.2. Bitmap cache • Architecture
    12. 12. 2.2. Bitmap cache (con’t) • Small tips: • A better version: • Honeycomb or later: android:largeHeap
    13. 13. 3. Memory leaking: Demos, Detection methods and Solutions
    14. 14. 3.1. Garbage collection • Basic algorithm: Mark and Sweep • Does no compacting • Memory leak ?
    15. 15. 3.2. Demo memory leak • Demo • Detection Method: • Code Review, Log and Heuristics
    16. 16. 3.3. Demo memory leak • Detection Method: • MAT • Solution
    17. 17. 3.4. Common ways to leak • Context Leak • Handler Leak or Inner Class leak Outer • Solution

    ×