2012-02-28 45 views
7

Tôi đang triển khai ứng dụng sử dụng Google Maps. Trong quá trình gỡ lỗi, tôi đã tìm thấy một lỗi thú vị mà bạn có thể dễ dàng tái tạo (tôi hy vọng). Nếu bạn kiểm tra ví dụ Hello MapView từ Google:Đây có phải là lỗi MapView không?

http://developer.android.com/guide/tutorials/views/hello-mapview.html

Lỗi: Nếu bạn trượt để bất kỳ hướng nào nhanh (thử theo hướng đường chéo), cho một khoảng thời gian, có thể bạn sẽ nhận được lỗi sau:

02-28 15:59:45.138: D/dalvikvm(26484): GC_CONCURRENT freed 2K, 13% free 18870K/21639K,  paused 2ms+4ms 
02-28 15:59:45.911: D/dalvikvm(26484): GC_FOR_ALLOC freed 1603K, 20% free 17396K/21639K, paused 14ms 
02-28 15:59:45.911: I/dalvikvm-heap(26484): Grow heap (frag case) to 18.546MB for 1560976-byte allocation 
02-28 15:59:45.942: D/dalvikvm(26484): GC_CONCURRENT freed 1K, 13% free 18919K/21639K, paused 2ms+2ms 
02-28 15:59:54.271: D/dalvikvm(26484): GC_CONCURRENT freed 2794K, 19% free 17649K/21639K, paused 2ms+2ms 
02-28 15:59:58.497: D/dalvikvm(26484): GC_CONCURRENT freed 856K, 18% free 17880K/21639K, paused 5ms+3ms 
02-28 16:00:04.341: D/dalvikvm(26484): GC_CONCURRENT freed 1003K, 17% free 18063K/21639K, paused 4ms+4ms 
02-28 16:00:11.083: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.091: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.614: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.614: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.638: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.646: D/dalvikvm(26484): GC_CONCURRENT freed 1097K, 16% free 18222K/21639K, paused 2ms+6ms 
02-28 16:00:11.646: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.646: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 

Bản đồ bị treo. Bất kỳ ý tưởng làm thế nào để giải quyết điều này?

+0

Tôi đã thử nghiệm ví dụ này trên một chiếc smartphone Galaxy S2 và Galaxy Nexus – user1238247

+0

Nhưng tôi đoán đây không phải là một vấn đề thực sự của mã của bạn . Không có lỗi chỉ có thông báo gỡ lỗi và thông tin. Điều này có ảnh hưởng nào đến mã của bạn và trải nghiệm người dùng không? – Yury

+1

Vấn đề là khi bạn trượt ngón tay trên bản đồ (nhanh) bản đồ bị treo. Bản đồ không thể sử dụng được nữa sau sự cố. Khi bản đồ bị treo, tôi nhận được thông báo sau "imageref_ashmem create failed" (như bạn có thể thấy ở trên). Tôi nghĩ rằng có một số vấn đề về bộ nhớ. Mã này là mã ví dụ từ liên kết tôi đã gửi ở trên. Bất cứ ai có thể tái tạo hành vi này? – user1238247

Trả lời

1

Hãy nghĩ rằng Google Maps gặp sự cố với OutOfMemoryError Tôi đã xem nó vài lần trên HTC Wildfire của mình. Nó có thể được sao chép một cách dễ dàng trên các thiết bị có bộ nhớ heap nhỏ. Khi bạn trượt (thay đổi kích thước) nhanh, bạn sẽ vượt quá tất cả các đống của bạn. Hãy nghĩ rằng bộ thu gom rác trong một số trường hợp không thể giải phóng bộ nhớ quá nhanh và bạn đã hết bộ nhớ.

+2

Giải pháp nào ngoài việc sử dụng bigHeap = "true"? – tasomaniac

1

Trong nhiều trường hợp, liên tục va chạm hành vi sử dụng MapView thể được giải quyết bằng cách đảm bảo rằng bạn đã xác định sử dụng largeHeap trong các yếu tố "ứng dụng" của ứng dụng của bạn biểu hiện, đặc biệt là trên các thiết bị màn hình lớn hơn (tablet). Thuộc tính này có sẵn bắt đầu từ API cấp 11 (Android 3.0).

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.ge.android.app" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="12" /> 

    <application android:icon="@drawable/app" android:label="@string/app_name" 
       android:debuggable="true" 
       android:theme="@style/CustomTheme" 
       android:largeHeap="true"> 
    ... 
    </application> 
    ... 
</manifest> 

See Also: Android Developer Guide - Android Manifest

Các vấn đề liên quan