0

In my app I have gridview. I want it to display complicated items with an image and some textviews. Here is my inflatable item

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="250dp"
    android:layout_height="160dp" >

    <ImageView
        android:id="@+id/comics_cover"
        android:layout_width="120dp"
        android:layout_height="160dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:src="@drawable/background_land"
        android:contentDescription="@string/contDescription_logo" />

    <ImageView
        android:id="@+id/cover_frame"
        android:layout_width="120dp"
        android:layout_height="160dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:src="@drawable/frame"
        android:contentDescription="@string/contDescription_logo" />

...

Here you can see an ImageView with id comics_cover. It has a source, but this source will be replaced at getView of my custom adapter.

Now the problem: I have 2 devices to debug my app, TeXet TM7024, which is weak in computing power, and Nexus 7, which is strong in it. TeXet inflates that xml without any problem, but Nexus crashes on that line where I'm inflating. Moreover, Nexus gives away different errors depending on screen orientation. This log is for portrait orientation

05-08 16:37:27.271: E/AndroidRuntime(15080): FATAL EXCEPTION: main
05-08 16:37:27.271: E/AndroidRuntime(15080): android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at ru.tamzap.comics.ShopAdapter.getView(ShopAdapter.java:49)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.AbsListView.obtainView(AbsListView.java:2159)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.GridView.onMeasure(GridView.java:1040)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.View.measure(View.java:15518)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.View.measure(View.java:15518)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.View.measure(View.java:15518)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.View.measure(View.java:15518)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.View.measure(View.java:15518)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.Choreographer.doFrame(Choreographer.java:532)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.os.Handler.handleCallback(Handler.java:725)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.os.Looper.loop(Looper.java:137)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at java.lang.reflect.Method.invoke(Method.java:511)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at dalvik.system.NativeStart.main(Native Method)
05-08 16:37:27.271: E/AndroidRuntime(15080): Caused by: java.lang.reflect.InvocationTargetException
05-08 16:37:27.271: E/AndroidRuntime(15080):    at java.lang.reflect.Constructor.constructNative(Native Method)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
05-08 16:37:27.271: E/AndroidRuntime(15080):    ... 46 more
05-08 16:37:27.271: E/AndroidRuntime(15080): Caused by: java.lang.OutOfMemoryError
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.content.res.Resources.loadDrawable(Resources.java:1965)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.ImageView.<init>(ImageView.java:120)
05-08 16:37:27.271: E/AndroidRuntime(15080):    at android.widget.ImageView.<init>(ImageView

And this is for landscape:

05-08 16:38:49.281: E/AndroidRuntime(15224): FATAL EXCEPTION: main
05-08 16:38:49.281: E/AndroidRuntime(15224): java.lang.OutOfMemoryError
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:378)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at ru.tamzap.comics.ImageHelper.decodeSampledBitmapFromResource(ImageHelper.java:49)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at ru.tamzap.comics.FormCovers$DownloadComics.prepareBackgrounds(FormCovers.java:166)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at ru.tamzap.comics.FormCovers$DownloadComics.onPostExecute(FormCovers.java:175)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at ru.tamzap.comics.FormCovers$DownloadComics.onPostExecute(FormCovers.java:1)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.os.AsyncTask.finish(AsyncTask.java:631)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.os.Looper.loop(Looper.java:137)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at java.lang.reflect.Method.invoke(Method.java:511)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-08 16:38:49.281: E/AndroidRuntime(15224):    at dalvik.system.NativeStart.main(Native Method)

What's the problem? Any ideas?

Anyways, i solved this problem by removing source of ImageView. But I'm interested in reasons of this errors.

I guess, that it depends on size of source image, because ImageViw with little image inflates without problems. But, in that case, why did TeXet "survived" and Nexus "fell"?

TrueCH
  • 501
  • 1
  • 6
  • 18
  • Did you close your RelativeLayout Tag? – DroidBender May 08 '13 at 10:45
  • 1
    you are getting OutOfMemoryError ! How big (wxh) are the image you add to your imageview? – Blackbelt May 08 '13 at 10:46
  • More specifically, you might be using an image that have a high DPI (>72). This often makes the images to large to load. Blackbelt is spot on! – Widerberg May 08 '13 at 10:54
  • well, i guessed that its all memory problem. but strange that weak device can handle big pictures (i tried 3mb picture), but strong device can't – TrueCH May 08 '13 at 19:15
  • and why there are 2 different error logs depending on screen orientation? thats the question – TrueCH May 08 '13 at 19:17

0 Answers0