2011-10-24 11 views
8

Xin chào, tôi đang tạo ứng dụng về biển báo giao thông. biển báo giao thông có định dạng .png. một số người trong số họ tôi đang hiển thị trong horizontalscrollview. Nhưng khi cố gắng mở các hoạt động, tôi nhận được lỗi này từ các báo cáo lỗi thị trường Android. đây là báo cáo lỗi của tôi:java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset()

<java.lang.RuntimeException: Unable to start activity ComponentInfo{com.besalti.svenskavagmarken/com.besalti.svenskavagmarken.varningsmarken}: android.view.InflateException: Binary XML file line #645: Error inflating class <unknown> 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) 
at android.app.ActivityThread.access$1500(ActivityThread.java:121) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3701) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #645: Error inflating class <unknown> 
at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227) 
at android.app.Activity.setContentView(Activity.java:1657) 
at com.besalti.svenskavagmarken.varningsmarken.onCreate(varningsmarken.java:25) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 
... 11 more 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
... 26 more 
Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:494) 
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:370) 
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:715) 
at android.content.res.Resources.loadDrawable(Resources.java:1720) 
at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
at android.widget.ImageView.<init>(ImageView.java:122) 
at android.widget.ImageView.<init>(ImageView.java:112) 
... 29 more> 

ai cũng có thể giúp tôi?

+0

Bạn có thể hiển thị mã cho varningsmarken.java và tệp xml bố cục cho nó không. Rõ ràng bạn cũng có một Typearray. Ngoài ra kích thước của hình ảnh được tải trong hình ảnh là gì? – JPM

+0

Cảm ơn rất nhiều bạn tôi đã sửa nó! –

+2

Đăng lên bản sửa lỗi để những người khác có thể học hỏi từ bạn, đó là trang web này là về cái gì ... cộng với tôi cũng rất tò mò. – JPM

Trả lời

3

Lỗi "kích thước bitmap vượt quá ngân sách VM" thực sự nằm trong thư viện đồ họa gốc (Skia). Nó là một chút khó hiểu là vấn đề thực sự là Skia đã hết bộ nhớ trong heap bản địa cho dữ liệu bitmap. Xem BitmapFactory OOM driving me nuts cho nền. Để có được vòng này, bạn sẽ phải xem xét cẩn thận việc sử dụng bitmap

  • đảm bảo rằng bạn không để lại tài liệu tham khảo bitmap nổi
  • làm một thùng/null onn bitmap khi họ trở nên miễn phí (điều này dường như Cứu giúp).
2

Sử dụng lấy mẫu để đọc bitmap. Có thể xảy ra lỗi do rò rỉ bộ nhớ.

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 4; 

Bitmap bitmap=BitmapFactory.decodeFile(path,options);